gpt4 book ai didi

c - 释放 malloc'd char* 导致段错误 11

转载 作者:行者123 更新时间:2023-11-30 21:21:33 26 4
gpt4 key购买 nike

对于 C 来说,我是个新手,所以这可能是一个愚蠢的问题。

我有一个结构体数组,结构体中的元素之一是 char *。我已按如下方式调用内存:

targetSummaryResult[row].target = calloc(1, sizeof(char *));

行等于1

稍后我想再次释放内存,我使用以下代码:

free(targetSummaryResult[row].target);

行仍然等于 1,但我在空闲时收到信号 11 段错误,但我不明白为什么。

最佳答案

首先,第一件事。

targetSummaryResult[row].target = calloc(1, sizeof(char *));

您在哪里检查 calloc 是否成功。

接下来您是否将目标指针初始化为其他内容,例如:

targetSummaryResult[row].target = "apple";

或者您在调用此之前是否已释放它:

free(targetSummaryResult[row].target);

两次释放内存可能会导致段错误。

编辑:

如果你打算做这样的事情:

targetSummaryResult[row].target = calloc(1, sizeof(char *));
targetSummaryResult[row].target = "apple";

那么你应该这样做:

targetSummaryResult[row].target = calloc(strlen("apple")+1, sizeof(char));\\+1 for the NUL terminating character in valid strings
//check if calloc was successful and handle errors if any
strcpy(targetSummaryResult[row].target,"apple");

关于c - 释放 malloc'd char* 导致段错误 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25264105/

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