对于C来说,我是一个新手,所以这可能是一个愚蠢的问题。
我有一个结构数组,结构中的一个元素是char *。我对内存的调用如下:
targetSummaryResult[row].target = calloc(1, sizeof(char *));
行等于1
。
稍后我想再次释放内存,我使用以下代码:
free(targetSummaryResult[row].target);
行仍然等于1,但我得到了一个免费信号11段错误,我看不出原因。
答案 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");