1. ホーム
  2. c

[解決済み] ダブルフリーオアコラプション(ファストトップ)

2022-01-28 19:59:51

質問内容

私のコードの次のセクションを実行すると、次のようなメッセージが表示されます。 * glibc が検出されました。 ./a.out: ダブルフリーまたは破損(fasttop): 0x08e065d0 *。 *

何度もコードを見直したのですが、どのように間違った使い方をしているのかがよくわかりません。 free (temp2)

bool found= false;
int x=0;
for ( x=0; x<=312500; x++)
{
    while (count <=32)
    {
        fscanf (file, "%d", &temp->num);  

        temp->ptr=NULL;

        newNode = (NODE *)malloc(sizeof(NODE));
        newNode->num=temp->num;
        newNode->ptr=NULL;

        if (first != NULL)
        {
            temp2=(NODE *)malloc(sizeof(NODE));

            temp2=first;
            while (temp2 != NULL && !found)
            {
                if (temp2->num == newNode->num) 
                {found=true;}

                temp2= temp2->ptr;
            }

            free(temp2);

            if (!found)
            { 
                last->ptr=newNode;
                last=newNode;
                count=count+1;
            }   
        }   
        else  
        {
            first = newNode;
            last = newNode;
            count=count+1;
        }

        fflush(stdin);
    }

解決方法は?

問題はここです。

        temp2=first;

基本的に temp2 を解放するときは、ここで確保したメモリではなく、まず temp2 を解放します。

        temp2=(NODE *)malloc(sizeof(NODE));

というのも、代入後はもう解放することができないからです。

また、あなたのコードにはさらにいくつかの問題があると思われます。 fflush を入力ストリーム上で使用することはできませんが、もう少し詳細がわからないと判断できません。