簡體   English   中英

向數據結構中添加許多結構(需要一元'&'操作數的左值)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM