[解決済み】malloc():メモリ破壊
2022-02-09 05:32:34
質問内容
以下は、このエラーが発生する可能性があると思われる簡易的なプログラムです。
char *p = (char*)malloc(8192);
for(int i = 0; i < 9200; ++i){
p[i] = '1';
}
char *s = (char*)malloc(strlen(p));
元のプロジェクトはかなり複雑なので、簡略化しました。8192バイトをmallocで代入しました。そして、8192文字以上の文字を配列に書き込むようにしました。そこで、mallocを使ってメモリを確保する。
このミニプログラムはクラッシュしませんでした。しかし、元の大きなプロジェクトでは、このエラーでクラッシュしてしまいます。
malloc(): メモリー破損。0x0000000007d20bd0**
この差の原因は何でしょうか?
解決方法は?
<ブロッククオートこの差の原因は何でしょうか?
基本的に、メモリアロケータが割り当てるのは ページ を一度に使用し、その中でポインタを与えます(次の領域が使用可能であることを確認します)。これらのページは通常8KiBより大きいので、あなたのミニプログラムでは問題はありません。しかし、より大きなプログラムがより大きなメモリを割り当て、割り当てられたスペースの終わりを越えてどんどん書き込んでいくと、未割り当てのメモリ(または他のプログラムが使用しているメモリ!)に書き込もうとすることになり、メモリを破壊してしまうことになります。
関連
-
[解決済み】Cコンパイルエラー。"変数サイズのオブジェクトが初期化されていない可能性がある"
-
[解決済み] c - 初期化がキャストなしでポインタから整数を作る、さらに2つのコンパイラーエラー
-
[解決済み】Cコンパイルエラーです。Idは1終了ステータスを返した
-
[解決済み] strtokのセグメンテーションフォールト
-
[解決済み】C言語におけるファイルスコープでの可変長配列の変更
-
[解決済み] Cプログラムで「配列の添え字が整数でない」。
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] mallocとcallocの違い?
-
[解決済み] Androidでアプリケーションのメモリ使用量を確認するにはどうすればよいですか?
-
[解決済み】ローカル変数のメモリはスコープ外からアクセスできる?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】stdinとSTDIN_FILENOの違いは何ですか?
-
[解決済み】C言語で「関数の型が競合しています」と表示される、なぜ?
-
[解決済み】「構造体でもユニオンでもないものにメンバー'*******'を要求する」とはどういう意味ですか?
-
[解決済み] struct has no member named
-
[解決済み】 「配列のイニシャライザーはイニシャライザーリストまたは文字列リテラルでなければなりません」と表示されるのですが?
-
[解決済み】コンパイラの警告 - 真理値として使用される代入の周囲に括弧を付けることを推奨する
-
[解決済み】LinuxのI_PUSHに相当するもの
-
[解決済み】エラー:不明な型名'bool'
-
[解決済み】宣言指定子で2つ以上のデータ型がある場合のエラー【非公開
-
[解決済み】警告:式の結果が未使用の場合