使用c中的free()进行分段错误

Mad*_*Sun -1 c memory free segmentation-fault

我试图用我的一些C代码找到问题.调试器说当我尝试从指针释放mem时发生错误:

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();
    ....
Run Code Online (Sandbox Code Playgroud)

Iha*_*imi 6

您重新分配desc,然后释放指向字符串文字的指针,这是非法的,它会导致分段错误.

您显然无法理解malloc()其用途,malloc()从操作系统请求内存并返回指向您可在程序中使用的有效内存的指针.

在你malloc()可以使用内存后,但并非所有指针都需要我malloc()编辑.例如,您可以指向字符串文字,它们也很有用.

但你不能传递任何东西free(),除非它被退回malloc()/ calloc()/ realloc().指向字符串文字或保存变量地址的指针不是这样的指针,并且将其传递给free()未定义的行为.

只有malloc()在你知道必须使用的情况下才能使用,例如分配大量可以溢出堆栈的内存,或者分配一个你可以在运行时计算的未知内存量.否则,不要.