2012-05-19 79 views

回答

4

你忘了values後添加星號(*)和v之前將其標記爲指針:values *v;

你現在設置的方式,在V(不帶星號)被定義爲堆棧變量並在堆棧中分配並在函數結束後丟棄。它的類型將只是valuesmalloc用於在堆上分配內存並返回指向內存的指針。正弦函數沒有辦法知道它的類型,它返回它作爲一個void *類型 - 這會給你你的錯誤 - 你試圖將一個void *類型分配到一個struct類型,編譯器不能這樣做,也不能編譯器找到可以解決問題的合法演員。

+0

感謝的人。你拯救了我的生命 – 2017-10-15 17:03:22

+0

@SMITPATIL你是最受歡迎的:) – immortal

3

在這種情況下,您不需要malloc內存;行values v;已經分配了內存(「在堆棧上」)。當您離開當前範圍時它將自動釋放。

如果你真的想分配「在堆上」的內存,所以它保持超過當前範圍,你需要v作爲一個指針;那就是:

values *v; 
v = malloc(sizeof(values)); 

記得到free它當你完成。

2

values v;

這是那是棧上分配結構的一個實例。

v = malloc(sizeof(values));

的malloc會返回一個指針void*和編譯器不會讓你一個指針賦給一個實例。

您需要聲明一個指針,然後爲其分配malloc返回指針。

東西排序

*值的V = NULL;

v = malloc(sizeof(values)); 

相關問題