c - 在c中使用free()出现段错误

标签 c memory segmentation-fault free

我正在尝试用我拥有的一些 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/

相关文章:

代码适用于 DEv C++ 和 Ideone,但不适用于竞赛网站

c - Valgrind 错误

c - 了解有关 c 中退出函数的一行

c - 如何保护Linux中进程间共享的内存

c - 运行程序时出现段错误(核心转储)

c - 在 C 中解析 CSV 行时出现段错误

c - 需要帮助将文件内容扫描到指针数组中

c - 我是否以错误的方式使用了 realloc?

c++ - 通过内存地址加载Lua函数变量?

c - 递归函数的段错误