Malloc,免费和分段错误

Seg*_*las 6 c malloc free segmentation-fault

我不明白,为什么在这段代码,调用"自由"导致段错误:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *char_arr_allocator(int length);

int main(int argc, char* argv[0]){

    char* stringa =  NULL;
    stringa = char_arr_allocator(100);  
    printf("stringa address: %p\n", stringa); // same address as "arr"
    printf("stringa: %s\n",stringa);
    //free(stringa);

    return 0;
}

char *char_arr_allocator(int length) {
    char *arr;
    arr = malloc(length*sizeof(char));
    arr = "xxxxxxx";
    printf("arr address: %p\n", arr); // same address as "stringa"
    return arr;
}
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释一下吗?

谢谢,塞戈拉斯

cod*_*ict 15

您正在使用malloc正确分配内存:

arr = malloc(length*sizeof(char));
Run Code Online (Sandbox Code Playgroud)

然后你这样做:

arr = "xxxxxxx";
Run Code Online (Sandbox Code Playgroud)

这将导致arr指向字符串文字的地址"xxxxxxx",泄漏您的malloc内存.并且调用free字符串文字的地址会导致未定义的行为.

如果要将字符串复制到已分配的内存中,请使用strcpy:

strcpy(arr,"xxxxxxx");
Run Code Online (Sandbox Code Playgroud)