1. ホーム
  2. c

[解決済み] 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");