- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:realloc関数でメモリエラー)
realloc関数でメモリエラー
このQ&Aのポイント
- Microsoft VS 6.0 で作成したプログラムでrealloc関数を使用すると、メモリエラーが発生してしまいます。
- realloc関数を複数回使用すると、他のメモリ領域が破壊される可能性があります。
- realloc関数を使用せずにmalloc関数のみを使用すると、メモリエラーは発生しません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
void * __cdecl realloc(void *, size_t); reallocは、引数で渡した先頭アドレスと、戻される再確保された領域の先頭アドレスは異なることがあります。 返されたアドレスを使って後の処理をしていますか?
その他の回答 (1)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
回答No.2
すいません。 pt1とpt2の関係はなんでしょう? pt2とはまったく関係が無いpt1が指し示す領域が破壊されているということでしょうか?
質問者
お礼
すいません。 もう一度ソースを見直した所、pt1の領域が別のソース上で 既にFreeされていました。 Freeされた元Pt1の領域にpt2が新たにアロケートをしようと した結果、見た目pt1の領域が破壊されたように見えていたようです。 アロケートは全く関係なく正常に動作していて、こちらの ソース上の問題でした。(お恥ずかしい限りです) お騒がせして申し訳ございませんでした&ご協力ありがとうございました。
質問者
補足
すいません。言葉足らずでした。 pt1とpt2は全く関係ないポインタ変数です。 なんで、realloc関数が領域を壊してるの??? て思ったのですが、、、 もう一度ソース見直してみます。。。
補足
回答ありがとうございます。 質問するのに最大文字制限があって書ききれてませんでした。 再確保したアドレスを使用して、そのあとの処理は行ってます。 途中省略してますが、こんな感じです。 --------------------------- for( i = 0 ; ; i++) { *pt2 = realloc( *pt2 ,sizeof(構造体) * (i+1) ); } これで、デバッグログを出力すると、、、 --------------------------- 【デバッグ情報】 pt1:変更されたポインタ変数 pt2:reallocによって再確保時使用ポインタ(ダブルポインタ) pt1->item1 :pt1の格納内容 pt1 <-内容 :pt1の格納しているアドレス値を表示 pt2 <-アドレス :pt2自身のアドレス値を表示 pt2 <-ア<-内容 :pt2の格納しているアドレス値を表示 pt2 <-ア<-ア :pt2の格納しているアドレス値が指し示す内容を表示 【ログ内容】 ---------- realloc前 pt1->item1 =[01]: pt1 <-アドレス =86733120: pt1 <-内容 =86781256: pt2 <-アドレス =1150176: pt2 <-ア<-内容 =92020460: pt2 <-ア<-ア =75746000: ---------- realloc後 pt1->item1 =[01]: pt1 <-アドレス =86733120: pt1 <-内容 =86781256: pt2 <-アドレス =1150176: pt2 <-ア<-内容 =92020460: pt2 <-ア<-ア =75746000: ※通常はこのようにpt1は何の影響も受けない ---------- realloc前 pt1->item1 =[01]: pt1 <-アドレス =86733120: pt1 <-内内容 =86781256: pt2 <-アドレス =1150176: pt2 <-ア<-内容 =92020460: pt2 <-ア<-ア =75746000: ---------- realloc後 pt1->item1 =[]: pt1 <-アドレス =86733120: pt1 <-内容 =959591986: pt2 <-アドレス =1150176: pt2 <-ア<-内容 =92020460: pt2 <-ア<-ア =86733120: ※realloc関数で再確保された領域がpt1のアドレスを上書きしている その為pt1の指し示す内容が変更されている と、こんな感じになってしまいます。。。 一体なぜ??? とハテナが一杯なんです。。。