2016-06-19 9 views
-2

私はCプロジェクトを開発していますが、特定の瞬間にcalloc()関数を呼び出し、それは既に使用中のメモリブロックを割り当てます。そんなことがあるものか ?私は私のメモリ割り当ての使用をチェックして、毎回malloc/callocを呼び出すたびに私はfree(pointer_to_the_allocated_memory)を呼び出します。つまり、メモリリークの問題ではなく、2度解放されたポインタではありません。 私はコードを貼り付けていません。なぜなら、これは教職の仕事であり、私はまだそれを送っていないからです。 あらゆるタイプのヘルプ/アドバイスを歓迎します。 ありがとうございます。Calloc()が以前に割り当てられたメモリを割り当てようとしています

+0

は/デバッグあなたのメモリ使用量を追跡するためにvalgrindのようなものを使用してみてください。 –

+0

各プログラムには独自の仮想メモリ空​​間があります。 – sjsam

+1

オリジナルと似たものを投稿できますか?独自のコードについては、直接共有したくないという質問をする人がたくさんいますが、通常は例を挙げています。状況を小規模に再現できますか? –

答えて

1

2つのポインタが同じ場所を指している可能性があります。

p1 = malloc(sizeof(int)); 
/* ... */ 
p2 = p1; 
/* ... */ 
free(p1); 
/* ... */ 
p3 = malloc(sizeof(int)); /* may allocate the block already used by p2 */ 

多くの場合、明らかではないことに注意してください。それはポインタ演算(すなわち、p2++)を介して行われてもよく、またはこれの異なる部分が異なる機能で行われてもよい。

もう一つの可能​​性は、あなたがそれに気付かず、ポインタを解放することです:

p1 = malloc(sizeof(int)); 
foo(p1); /* this function calls free(p1) */ 
p2 = malloc(sizeof(int)); /* may allocate the block already used by p1 */ 
+1

可能であれば、それはそうではなく、あなたが書いたシナリオが起こることを知る方法がないことに注意するべきでしょう。コンパイラの実装に特化したものです。 – Nava2

+1

calloc()が既に "使用中のメモリブロックを割り当てる"という事実を考えれば、それは可能性が高い。使用中のメモリブロックを割り当てるには、ブロックを解放するか、割り当てないようにする必要があります。 – user31264

+0

回答ありがとうございますuser31264 – mariano

関連する問題