
No.4ベストアンサー
- 回答日時:
>個人的には、メモリーがオーバーフローした、free()のやり方を間違えた。
mallocの使い方を間違えた、のうちのどれかが原因だと思っているのですが個人的には、これら以外にも(mallocとは無関係に)
プログラムが、確保した領域外をアクセスした
という可能性もありますよ。
アクセスした領域外がたまたま、malloc 等で用いる『管理情報』であり、
7回目のmalloc実行時にエラーが起きたのでは?
この回答へのお礼
お礼日時:2021/12/08 20:43
ありがとうございます。
結局別のところのmallocが自分のイメージしていたものより小さい領域しか確保していなかったのが原因っぽいです。ありがとうございました
No.6
- 回答日時:
>メモリーがオーバーフローした、
>free()のやり方を間違えた。
>mallocの使い方を間違えた、のうちのどれか
領域外アクセスで malloc が落ちるのは珍しくないです。
mallocの実装によりますが、
malloc で確保したメモリブロックは、その前後に
そのブロックの管理領域を持ってることが多く
それに誤って書き込むと malloc が発狂します。
No.5
- 回答日時:
こういうツールを使ってデバッグすると良いと思います。
https://ja.wikipedia.org/wiki/Valgrind
当然ですが、例外が発生したところが原因じゃ無くて、そのずっと前にバグがあります。
> メモリーがオーバーフローした、free()のやり方を間違えた。mallocの使い方を間違えた、のうちのどれかが原因
「メモリーがオーバーフロー」が文字通りの意味だとすると、メモリが足りなくなることで今回は関係ないです。あるいは添え字の範囲オーバーのことですかね?
原因として考えられるのは、
・配列の添え字範囲オーバー
・ポインターの使い方がおかしい
・malloc/freeの間違い
・変数宣言の型がおかしい
あたりでしょうか。
実行せずに、静的にデバッグするには、自信なく書いた部分を徹底的に見直すか。
No.3
- 回答日時:
「malloc 等で用いる『管理情報』をあやまってぶち壊す」というケースも考えられるので, そういうチェックも必要かもしれない.
最悪は「実はハードウェアの障害」ということもありえなくはないけど, そうなるともうどうしようもないね. 「別の機械で動かしてみる」くらい.
No.2
- 回答日時:
「本当に問題がある」ときには, 非常にチェックがしにくくなるんだよな.... とりあえず
・malloc と free の回数
・free する値が「正当」かどうか
を確認する, くらいかなぁ. ちなみにそこに補足してある程度では何もわからない.
あ, free で引数をキャストするのはやめた方がいいよ. 特にその補足にあるようなキャストは完全に無意味だし.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAがブレークモードになっ...
-
実行時エラー -'-2147417848
-
VBAでのエラー
-
実行時エラー 438になった時の...
-
※初心者です マクロVBAについて
-
【マクロ】エラー【#DIV/0!】が...
-
【Excel VBA】マクロをボタンに...
-
なぜこんな初歩的なVBAのIf文で...
-
実行時エラー48発生時のDLL特定...
-
実行時エラー3001「引数が間違...
-
Access2000での未定義関数repla...
-
VBAで、定数式が必要ですのエラ...
-
「定数式が必要です。」って何...
-
マクロについて教えてください...
-
VBSで変数の宣言はできないので...
-
UWSCのビジー待ちで60秒経った...
-
excel2016では問題ないのがexce...
-
ExcelVBA Range クラスの Page...
-
アクセス 実行時エラー3265
-
ExcelVBAで、ユーザー定義型は...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
VBAがブレークモードになっ...
-
【マクロ】エラー【#DIV/0!】が...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAでのエラー
-
実行時エラー -'-2147417848
-
実行時エラー48発生時のDLL特定...
-
マクロについて教えてください...
-
ExcelVBA Range クラスの Page...
-
EXCEL VBAマクロ中断でデバッグ...
-
実行時エラー3001「引数が間違...
-
EXCEL/VBAで、自分のPCだけエラ...
-
VB6+SQL サーバー 2000 で 実行...
-
VBAのエラー発生場所をメッセー...
-
ADODB.Streamを使用してUTF-8を...
-
【Excel VBA】マクロをボタンに...
-
OLEDB.NETで接続できない
-
なぜエラーになるのでしょうか...
-
INSERT INTOステートメント構文...
-
Outlook.ApplicationをCreateOb...
おすすめ情報
ちなみにmallocは
int* a =NULL;
a =(int*) malloc((n+1)*sizeof(int));
みたいにしていて
freeは
free((int*)a);
としています。
nは関数の引数でエラーで停止したときは4が入っていました。
malloc(int i)値とは何でしょうか?
7回目のmalloc実行時にエラーが起きました、その時20*sizeof(int)の領域を確保しようとしました。合計では973*sizeof(int)の領域を確保していました。 その時freeは1回しか実行されていませんでしたがプログラムの途中でのエラーなのでこれは問題ない気がします。
free する値が「正当」かどうかは一応変数名にスペルミスがないかは確認しました。