[解決済み] munmap_chunk(): 無効なポインタ
2022-03-14 14:42:54
質問
私は自分のプログラムのエラーに気づいたので、何が起こっているのかを理解するのに役立つ簡単なものを書くことにしました。それはここにあります。
#include <stdio.h>
#include <stdlib.h>
char * first()
{
char * word = malloc(sizeof(char) * 10);
word[0] = 'a';
word[1] = 'b';
word[2] = '\0';
return word;
}
char * second ()
{
char * word = malloc(sizeof(char) * 10);
word = "ab";
return word;
}
int main ()
{
char * out = first();
printf("%s", out);
free(out);
out = second();
printf("%s", out);
free(out);
return 0;
}
は
first()
関数は正常に動作していますが
second()
(正確には
free(out)
というエラーが発生します。
Error in `./a.out': munmap_chunk(): 無効なポインタです。0x0000000000400714 *** ababAborted (コアダンプ)
なぜ最初の関数は正しくて、2番目の関数は正しくないのか理解できません。どなたか理由を説明していただけませんか?
どのように解決するのですか?
関数内で
second()
の場合、代入は
word = "ab";
に新しいポインタを代入します。
word
で取得したポインタを上書きします。
malloc()
. を呼び出すと
free()
へのポインタを渡したため、プログラムがクラッシュします。
free()
によって取得されていない
malloc()
.
文字列リテラルを代入しても、思ったようにその内容をコピーする効果はありません。文字列リテラルの内容をコピーするには、次のようにします。
strcpy()
:
strcpy(word, "ab");
関連
-
#137: 式は変更可能なlvalueでなければならない問題 // 文字列配列の代入問題
-
エラー: 宣言されていない識別子 'bool' の使用と C コンパイラでの問題点
-
警告:符号付き整数式と符号なし整数式の比較 [-Wsign-compare]
-
[解決済み] munmap_chunk(): 無効なポインタ
-
[解決済み] C言語で%sを正しく使う - 超基本レベル
-
[解決済み] C関数から文字列を返す
-
[解決済み] printfは、フォーマット文字列の中に改行がないと、呼び出し後にフラッシュしないのはなぜですか?
-
[解決済み] C言語でファイルサイズを取得するには?[重複]する
-
[解決済み] C言語の構造体(CGRectやCGPointなど)をNSLog化することは可能ですか?
-
[解決済み] 2次元配列の反復処理において、ループの順序がパフォーマンスに影響するのはなぜですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
_CRT_SECURE_NO_WARNINGS エラーメッセージ、解決方法
-
libc++abi.dylib: NSException タイプの捕捉されない例外で終了するエラー
-
赤線の位置は必ずしも間違っていない:式は変更可能なlvalueでなければならないエラーは、この文とは別の場所に存在する可能性があります。
-
警告:符号付き整数式と符号なし整数式の比較 [-Wsign-compare]
-
[解決済み] Valgrind が初期化されていないバイトについて警告する
-
[解決済み] C言語でchar配列をコピーする方法は?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 難読化Cコードコンテスト2006。sykes2.cの解説をお願いします。
-
[解決済み] printfは、フォーマット文字列の中に改行がないと、呼び出し後にフラッシュしないのはなぜですか?
-
[解決済み] C言語のi++と++iに性能差はあるのでしょうか?