
No.4ベストアンサー
- 回答日時:
>個人的には、メモリーがオーバーフローした、free()のやり方を間違えた。
mallocの使い方を間違えた、のうちのどれかが原因だと思っているのですが個人的には、これら以外にも(mallocとは無関係に)
プログラムが、確保した領域外をアクセスした
という可能性もありますよ。
アクセスした領域外がたまたま、malloc 等で用いる『管理情報』であり、
7回目のmalloc実行時にエラーが起きたのでは?
ありがとうございます。
結局別のところの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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- Excel(エクセル) この関数の間違いを教えて下さい 2 2023/08/07 22:40
- Excel(エクセル) この関数の誤りを教えて下さい。 3 2023/08/08 07:36
- Excel(エクセル) エクセルVBA 作業後に選択範囲を解除する方法 5 2023/02/17 07:13
- プリンタ・スキャナー キャノンmp490プリンター【エラー番号5400】で【プリンタートラブルが発生しました。電源を入れ直 2 2023/07/24 17:45
- Excel(エクセル) 【マクロ】エラーが発生⇒実行時エラー58既に同名のファイルが存在 5 2022/08/31 10:03
- 哲学 日本語は論理表現にふさわしくないか の問題です 4 2022/06/25 03:56
- Excel(エクセル) Indirect関数について、Formulatextで抽出した数式を参照したい。 1 2022/12/15 11:16
- Visual Basic(VBA) <excel vba>selenium basicのWebDriverの自動更新のエラーについて 1 2022/10/01 17:07
- Excel(エクセル) Excel起動時にエラーダイアログが表示される 3 2022/07/28 19:52
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
VBAがブレークモードになっ...
-
実行時エラー -'-2147417848
-
実行時エラー48発生時のDLL特定...
-
マクロについて教えてください...
-
エクセルエラー13型が一致しま...
-
【Excel VBA】マクロをボタンに...
-
アプリケーション定義またはオ...
-
「アプリケーション定義または...
-
エクセルVBA、フリーフォームで...
-
マクロを作成したのですが、以...
-
実行時エラー3001「引数が間違...
-
なぜエラーになるのでしょうか...
-
VBAで、定数式が必要ですのエラ...
-
”オブジェクト参照がオブジェク...
-
なぜこんな初歩的なVBAのIf文で...
-
【VBA】ボタンに登録したマクロ...
-
[Delphi] データセットは閉じて...
-
Excelマクロのオートメーション...
-
ExcelVBAで、ユーザー定義型は...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
VBAがブレークモードになっ...
-
なぜこんな初歩的なVBAのIf文で...
-
ExcelVBA Range クラスの Page...
-
EXCEL VBAマクロ中断でデバッグ...
-
実行時エラー -'-2147417848
-
【Excel VBA】マクロをボタンに...
-
Outlook.ApplicationをCreateOb...
-
VBAでのエラー
-
マクロについて教えてください...
-
実行時エラー3001「引数が間違...
-
実行時エラー48発生時のDLL特定...
-
VB6+SQL サーバー 2000 で 実行...
-
エクセルエラー13型が一致しま...
-
VBS実行時エラー オブジェクト...
-
ADODB.Streamを使用してUTF-8を...
-
INSERT INTOステートメント構文...
-
VBAで、定数式が必要ですのエラ...
-
OLEDB.NETで接続できない
-
VBSで変数の宣言はできないので...
おすすめ情報
ちなみに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 する値が「正当」かどうかは一応変数名にスペルミスがないかは確認しました。