1. ホーム
  2. スクリプト・コラム
  3. その他

[解決済み】 munmap_chunk(): 無効なポインタ

2022-01-10 10:28:05

質問

コードは次のとおりです。

#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(): invalid pointer: 0x0000000000400714 *** ababAborted (core dumped)

最初の関数は正しいのに、2番目の関数は正しくないというのは理解できない。 

どのように解決するのですか?

関数内で second() の場合、代入は word = "ab"; に新しいポインタを代入します。 word で取得したポインタを上書きします。 malloc() . を呼び出すと free() へのポインタを渡したため、プログラムがクラッシュします。 free() によって取得されていない malloc() .

文字列リテラルを代入しても、思ったようにその内容をコピーする効果はありません。文字列リテラルの内容をコピーするには、次のようにします。 strcpy() :

strcpy(word, "ab");