
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
Outlook.ApplicationをCreateOb...
-
VBAでのエラー
-
EXCEL/VBAで、自分のPCだけエラ...
-
実行時エラー3001「引数が間違...
-
ADODB.Streamを使用してUTF-8を...
-
VBAのコードがエラーになっ...
-
実行時エラー -'-2147417848
-
【マクロ】エラー【#DIV/0!】が...
-
実行時エラー48発生時のDLL特定...
-
VB6+SQL サーバー 2000 で 実行...
-
C言語 mallocのエラーに関する質問
-
OLEDB.NETで接続できない
-
職場から目的地までの距離集計
-
エラー1004 PDFの保存ができま...
-
1列目の何行目に検索文字がある...
-
なぜこんな初歩的なVBAのIf文で...
-
EXCEL VBAマクロ中断でデバッグ...
-
カーソルオープンでエラー(ORA...
-
DataGridView からの値取得に関...
マンスリーランキングこのカテゴリの人気マンスリー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 する値が「正当」かどうかは一応変数名にスペルミスがないかは確認しました。