私は取得しています問題を使用して、それを解放した後、ポインタを使用して:私は、セグメンテーションフォールトを取得しています次のコードタイプと自由()
int* myPointer1 = malloc(50 * sizeof(int));
int* myPointer2 = malloc(50 * sizeof(int));
free(myPointer1);
myPointer1 = myPointer2;
myPointer1[0] = 3;
。どうしたの?
私は取得しています問題を使用して、それを解放した後、ポインタを使用して:私は、セグメンテーションフォールトを取得しています次のコードタイプと自由()
int* myPointer1 = malloc(50 * sizeof(int));
int* myPointer2 = malloc(50 * sizeof(int));
free(myPointer1);
myPointer1 = myPointer2;
myPointer1[0] = 3;
。どうしたの?
このコードでは問題はありません。あなたが投稿したスニペットは正しいと思われ、孤立してうまく動作します。
コードスニペットは正しいため正しくありません。正しく動作しているため正しくありません。UBであってもうまく動作し、予想以上に時間が掛かります。 –
"コードスニペットが正しいため正しいです" - > http://xkcd.com/703/ =) – jadarnel27
正しいとは言えませんでしたが、正しく機能していると言いました。それは明らかに未定義の振る舞いを含んでいません)、*と*は動作します(例えば、私はセグメント化の失敗を報告しません)。 – duskwuff
あなたのコードは間違っていませんが、malloc()関数の戻り値をテストする習慣を作っています。もしNULLであればプログラムで問題が発生します。 malloc()関数が失敗しました
malloc操作が成功したことを確認しましたか? myPointer1をNULLに割り当てていない場合があります。 – djhaskin987
あなたはどこでセグメンテーションをしますか? 'free(myPointer1)'または 'myPointer1 [0] = 3'で? – Seth
'malloc'が成功した場合、segfaultは存在しません。あなたがやっていることは、 'myPointer1'の元のメモリ位置でメモリを解放し、' myPointer1'を 'myPointer2'の位置に再割り当てすることだけです。ただし、メモリの最後のビットを解放する場合は、ポインタが同じアドレスを指しているので、ポインタの1つ(つまり、 'myPointer1'または' myPointer2')を解放したいだけです。 – RageD