[英]Adding many structs to a data structure (lvalue required as unary '&' operand)
我有一個創建並返回節點的函數,我打算將其添加到哈希表中:
HashTableNode CreateNode(char* url){
HashTableNode new;
new.url = malloc(sizeof(char) * (strlen(url) + 1));
strcpy(new.url, url);
return new;
}
我試圖將其中的許多節點添加到哈希表中,但是遇到了一個問題:
AddToHashTable(&lookup_table, &CreateNode(result));
給我一個錯誤(需要一元'&'操作數的左值)。 我相信這是因為我要返回的結構在內存中沒有關聯的地址。 為了測試某些功能,我可以手動分配幾個節點並將其添加到哈希表中,但是很明顯,此解決方案無法很好地擴展。
我試圖在我的CreateNode函數中返回一個指向節點的指針:
HashTableNode* CreateNode(char* url)
{
HashTableNode new;
new.url = malloc(sizeof(char) * (strlen(url) + 1));
strcpy(new.url, url);
return &new;
}
但是相反,我收到警告,告訴我我正在返回局部變量的地址。
有沒有一種方法可以向表分配大量結構,而無需先將它們分配給變量?
您將返回一個本地對象
new
,當
CreateNode
函數定義遇到
}
標點符號(即結束)時,
生存期將結束。
從外部讀取此類對象是
不確定的行為 。
而是將CreateNode
定義為:
HashTableNode* CreateNode(char* url)
{
HashTableNode *new = malloc(sizeof(*new));
// new->url...
return new;
}
這也解決了AddToHashTable
調用的麻煩,因為您已經有了HashTableNode*
類型的指針:
AddToHashTable(&lookup_table, CreateNode(result));
還建議您始終檢查malloc
函數的結果,因為它有一天可能會失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.