我有我製作的結構類型的指針。在程序開始時,它開始爲NULL,然後我再malloc/realloc,因爲我需要添加/刪除這些結構,我只是要用我的指針指向第一個結構,並像數組一樣移動它。嘗試創建指針時,賦值錯誤中的無效左值NULL
當我的malloc/realloc的我總是把「陣列」的大小在存儲器中的一個比它需要更大/面積。我這樣做,所以我可以將內存中的「最後索引」/區域設置爲NULL,所以我可以說while(pointer!= NULL)。
我得到的錯誤:在分配無效的左值當我嘗試分配NULL來與線的存儲陣列/地區的最後一個位置:
// Realloc remotelist by adding one to connrhosts
connrhosts++;
remotelist = realloc(remotelist, sizeof(rhost)*(connrhosts + 1));
(remotelist + connrhosts) = NULL;
我想我要說的是:
- 它的時間,一個新的結構添加到我的數組,所以我會加一connrhosts。
- realloc的一種指點remotelist到一個新的內存區域是connrhosts(多少結構我會用)以及一個附加空間的大小的內存,所以我可以讓它空
- 點remotelist到新的內存區域
- 使用我的指針remotelist並添加偏移connrhosts,它現在將指向內存區域的最後一個索引,並將該指針設置爲NULL。
就我所能說的(或感覺)我所做的一切都是正確的,但是我一直在做這個項目已經有一段時間了,現在我有了隧道視覺的印象。我很想有一個全新的眼睛看看我的邏輯/代碼,讓我知道他們的想法和我做錯了什麼。再次感謝。 :d
編輯 - 我的問題 部分原因是我覺得我有什麼我可以做的指針的誤解。
這裏是我的結構:
typedef struct {
char address[128]; // Buffer that holds our address of the remote host
int port; // Port of the remote host
int conn; // FD to the connection of our remote host
int ofiles; // Open files associated with the remote host
} rhost;
我希望我所能做的就是遍歷的記憶我的數組/地區,並說如果不爲空,然後用它做什麼。所以我原來的循環語句是while(NULL!= remotelist)。現在我相信閱讀的迴應和評論,這種邏輯是錯誤的,因爲我檢查指針是否爲空?我應該檢查指針指向的內存/結構區域是否爲空?如果是這種情況,它應該像while(NULL!= *(remotelist + someoffset))?
我做這種方式爲我的老師建議它/在課堂上談論它。
我最初聲明/ remotelist的初始化是:rhost的* remotelist = NULL;當LHS是評估表達式,不會成爲可以分配的變量發生
比較順便說一句,爲什麼你在做'++ connrhosts',然後在配置中使用'connrhosts + 1'?那個額外的'+ 1'的目的是什麼? – AnT 2010-03-07 22:50:59
connrhosts是我可以連接的遠程主機的當前數量。我只有兩個索引,0和1,都指向一個結構,我做+1,所以我可以有三個索引,0,1和2,其中0和1指向一個結構,2可以等於NULL。這樣我就可以像while(NULL!= remotelist) – Chris 2010-03-07 22:54:35
這樣的語句。rhost是一個結構。你所做的分配,remoteli st指向的是這些結構的數組*,而不是指針數組。您不能將結構設置爲NULL,因此您需要另一種方式來表示列表的結尾。一種方法是保持整數與計數掛在一起,並將其與指針一起傳遞。另一種方法是使用rhost的一個字段作爲「數據結束」標記,例如說,如果'ofiles'爲-1,則意味着數組的末尾。你可以使用實際的以NULL結尾的指針數組。我不推薦它:你必須分開分配它們。 – 2010-03-07 23:01:51