7

動的メモリ割り当てに少し問題があります。

以下は、問題を解決するために試行錯誤してきたテスト コードです (これは、現在のプロジェクトのコードと同じ問題です。これは、それを表示するためのより簡単な方法です)。

#include<stdlib.h>
#include<stdio.h>
#include<assert.h>

int main(){

    int x = 5;
    int *ptr = (int*) malloc(sizeof(int));
    assert(ptr != NULL);
    ptr = &x;

    printf("x = %d\n",x);

    *ptr = 3;
    printf("x = %d\n",x);

    free(ptr);

    return 0;
}

プログラムは正常にコンパイルされ、実行すると「x = 5 x = 3」という正しい出力が出力されますが、エラーが発生します。

glibc detected  ./dnam: free(): invalid pointer: 0xbfccf698

dnam はテスト プログラムの名前です。エラーについて読んだところによると、malloc/calloc/realloc していないメモリを解放したことが原因であると思われます。

このエラー メッセージの後に、バックトレースとメモリ マップが続きます。メモリ マップの最後で、プログラムが中止された (コア ダンプされた) と表示されます。

4

3 に答える 3

12
   int *ptr = (int*) malloc(sizeof(int));

   ptr = &x;

あなたは価値を変えていptrます!解放しようとすると、コンパイラは無限の復讐をします。

ここ:

free(ptr);

freeを通じて割り当てられていないオブジェクトを-ing していますmalloc

于 2013-11-12T22:39:34.683 に答える
0

このコードを使用したい場合は、一時ポインターを使用して、init ptr.at last free(temp) を次のように保存する必要があると思います。

 int *temp = ptr;


  free(temp);
于 2015-12-22T12:35:09.627 に答える