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

时间:2014-08-12 12:18:26

标签: c

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

我有一个结构数组,结构中的一个元素是char *。我对内存的调用如下:

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

行等于1

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

free(targetSummaryResult[row].target);

行仍然等于1,但我得到了一个免费信号11段错误,我看不出原因。

1 个答案:

答案 0 :(得分:2)

首先,首先。

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");