gpt4 book ai didi

c - Malloc、空闲和段错误

转载 作者:行者123 更新时间:2023-11-30 17:25:53 25 4
gpt4 key购买 nike

我不明白为什么在这段代码中,对“free”的调用会导致段错误:

#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;
}

谁能给我解释一下吗?

谢谢,塞戈拉斯

最佳答案

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

arr = malloc(length*sizeof(char));

然后你这样做:

arr = "xxxxxxx";

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

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

strcpy(arr,"xxxxxxx");

关于c - Malloc、空闲和段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26957566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com