-1

いくつかのデータ型にメモリを割り当て、いくつかの値を割り当てました。現在使用free中のメモリ内のデータは削除されていますか?free割り当てられたデータが削除されていない場合、使用の用途は何ですか? 誰でも私を助けることができますか?元:

int *arr;
arr=(int*)malloc(sizeof(int)*1000);
assert(arr!=NULL);
/*Some operation*/

arr[123]=354;
//some operations

printf("%d",*(arr+123));
//calling some funcs

free(arr);

printf("\n%d",*(arr+123));
4

3 に答える 3

5

のポイントはfree、割り当てたメモリを次の呼び出しで使用できるようにすることmallocです。渡されたバッファが何らかの方法で消去されることは保証されません。

実際、あなたがしていることは、未定義の動作を引き起こしています。'dされたバッファーにアクセスするfreeと、以前に格納されていた値またはその他の値が返されたり、プログラムがクラッシュしたり、その他のことが行われる可能性があります。

于 2012-09-17T14:18:25.993 に答える
2

記憶から物事を「削除」することはできません。

メモリを再free()利用して 、将来の への呼び出しで再利用できるようにします。malloc()

malloc()取得したポインター(またはその他の動的割り当て呼び出し) を呼び出した後、合法的に逆参照することはできませんfree()。これを行うと、未定義の動作が呼び出されます。

于 2012-09-17T14:19:17.773 に答える
0

malloc を使用すると、指定したバイト数を確保して、必要なものに使用できます。エリアへのアドレスが返されます。メモリ領域は、別のプロセスまたは別の malloc によって予約できないことを意味する、占有されているという特別なテーブルでもフラグが立てられます。

割り当てられたメモリを解放すると、その領域は空きとしてフラグが立てられますが、データは消去されません。データを消去したい場合は、memset または手動でループを実行し、データを解放する前に 0 またはその他の値に設定する必要があります。

他の人が述べたように、空きメモリに対する操作は未定義です。

メモリを配置する方法を簡単に紹介します。つまり、ヒープを見てください: http://www.geeksforgeeks.org/archives/14268または図 1. このコメントの下部:奇妙なグローバル変数の動作、変数名が変更されると問題が消える

malloc プロセス自体については、こちらに詳しく書いています。 次のメモリ割り当て C プログラムのパフォーマンス動作を説明できる人はいますか? 仮想メモリと物理メモリ、ページなどもポイントの一部です。

于 2012-09-17T14:32:40.813 に答える