mallocを使用しないようにバックネットスタックの一部を編集しようとしています。常に失敗するためです。コードはmallocを使ってオブジェクトを作成し、リンクされたリストに挿入します。次のコードスニペットでは、mallocをコメントアウトしました。私の計画は、構造体のローカルインスタンスを作成し、それを私のリストに挿入することです。私は私のリストに2つの項目を挿入することができる、3番目を追加しようとすると、リストが正しく終了されていないと私は無限のwhileループを入力します。誰でも私のリストが正しく終了していない理由を見ることができますか?Cリンクリスト無限ループ
CHobjectsはstuctであり、それらのリンクリストが必要です。新しいCHobjectインスタンスを作成するためにmallocを使用することはできません。これを回避するために、私は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')は同じに見え、混乱します。 –
整数型を仮定してコンパイルします。 –