我正在尝试用我拥有的一些 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
然后释放指向字符串文字的指针,这是非法的,并且会导致段错误。
你显然没有理解什么malloc()
是为了,malloc()
从操作系统请求内存并返回一个指向您可以在程序中使用的有效内存的指针。
在你之后malloc()
你可以使用内存,但不是所有的指针都需要我malloc()
编辑。例如,您可以拥有指向字符串文字的指针,它们也很有用。
但是你无法将任何内容传递给 free()
除非它是由 malloc()
返回的/calloc()
/realloc()
。指向字符串文字或保存变量地址的指针不是这样的指针,并将其传递给 free()
是未定义的行为。
仅使用malloc()
例如,如果您知道必须分配大量会溢出堆栈的内存,或者分配可以在运行时计算的未知内存量。否则,不要。
关于c - 在c中使用free()出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39392874/