【发布时间】:2017-01-16 12:01:05
【问题描述】:
我正在尝试使用我拥有的一些 C 代码来查找问题。调试器说当我尝试从指针中释放内存时发生错误:
int main(int argc, char *argv[]){
char *desc = malloc(30 * sizeof(char));
if(desc == NULL)
{
fprintf(stderr, "Error - cannot allocate memory\n");
}
desc = "Debug this program.";
printf("Description: %s\n", desc);
free(desc);//break point here
int cpid = fork();
....
【问题讨论】:
-
你试图释放一个字符串的地址,这是非法的。
-
此外,从字符串文字分配分配的指针几乎总是错误的。如果要将文字复制到
desc,请使用strcpy。 -
请注意,
sizeof(char)始终为 1。它是对象大小的度量单位。 -
@Lundin 查看可能的重复项,这里似乎正在接受的答案看起来不像其他“重复项”的任何答案。
-
@dckuehn 随意提出更好的副本。 (This one?)。问题是 OP 不了解指针和数组是如何工作的,也不了解字符串是如何工作的。
strcpy会解决问题的。
标签: c memory segmentation-fault free