我想編輯部分backnet堆棧不使用malloc,因爲它總是失敗。該代碼使用malloc創建一個對象並插入到鏈接列表中。在下面的代碼片段中,我已經註釋掉了malloc。我的計劃是創建一個結構的本地實例並將其插入到我的列表中。我能夠插入2個項目到我的列表中,當嘗試添加第三個時,列表未正確終止,並且我輸入了無限循環。任何人都可以看到爲什麼我的列表沒有正確終止?C鏈表無限循環
CHobjects是一個stuct,我想要一個鏈接列表。我不能使用malloc來創建新的CHobject實例。爲了解決這個問題,我試圖創建一個CHobject的本地實例並將其添加到我的列表中。
CHobjects* newNode(instance, channel, name, description)
{
CHobjects *node;
CHobjects newNode;
node=CHobjects;
while(node!=NULL)
{
if(node->instance==instance)
return
node=node->next;
}
if(strlen((char *)objectName)>objectNameMax || strlen((char *)description)>descriptionMax)
goto cc8; //fail name or description is too long
// if((node=(CHobject *)malloc(sizeof(CHobject)))==NULL) //get a block of space for this object's info
// goto cc8; //fail if we can't get space for it
test.next=CHobjects; //link on to list
CHobjects=&test;
CHcount++;
}
該代碼只是將元素添加到列表中,然後整個代碼將一些變量設置爲默認值。
請顯示您的實際代碼。 objectName被定義在哪裏? 「CHobject」在哪裏定義? – lurker
請發表真實的代碼。此外,使用良好的格式化'strlen((char *)objectName)> objectNameMax'和'strlen((char *)objectName-> objectNameMax'看起來完全相同並且很混亂 –
它會編譯但是假設整數類型 –