-1

これは私の正確なコードではありませんが、本質的にはこのようなものです。main() でスタック変数を作成しようとしています

int **x;

関数 foo(int **x, arg1, arg2, ...) に渡したいもの。ある条件では、foo() で x に動的にスペースを割り当てることになっています

x = (int **) malloc(sizeof(int *) * num_elems);

また、各 int * 要素に新しいスペースを割り当てるのではなく、int y が foo() で作成された場所に &y を割り当てます。

main() で x を解放しようとしたときに、このエラーが発生しました。意味がわかりませんが、おそらく &y? を使ったからだと思います。

編集: また関連: x の二重逆参照要素にアクセスしようとしたときに、ガベージ値を取得しました。

4

2 に答える 2

1

main 関数で正しく宣言されておらず、foo() 関数で正しく定義されていません。として宣言する必要があります

メイン機能で

int *x ;
foo(&x);

foo(int **x,....) で

*x =  malloc(sizeof(int) * num_elems);
于 2013-04-18T05:28:09.440 に答える
0

このことを考慮、

void foo()
{
    int y;
    int *x = NULL;
    x = &y;
}

この場合、yスタックに格納されます。foo返却時はyご利用いただけません(実装依存)。絶対にこれを行う必要がある場合は、malloc y代わりに. これを行うと、y代わりにヒープに格納されます。

于 2013-04-18T05:58:16.603 に答える