gpt4 book ai didi

c - Malloc、free 和段错误

转载 作者:太空狗 更新时间:2023-10-29 17:15:43 27 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" 的地址,泄漏 你的 malloced 内存。并且在字符串文字的地址上调用 free 会导致未定义的行为。

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

strcpy(arr,"xxxxxxx");

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

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