C中的动态内存分配

kar*_*hik 1 c free pointers

我只是在c语言上试验一下你能回答我关于我写的程序的问题

void main()
{
    char *p,; // created a  pointer pointing to string
    p = (char *) malloc(50); // dynamically create 50 bytes.
    strcpy(p, "this code is written about the dynamic allocation");
    p += 20;
    free(p);
}
Run Code Online (Sandbox Code Playgroud)

现在有人能告诉我free(p)语句的效果是什么,将释放最后30个字节并用于将来的内存分配.什么是输出?

Thi*_*ter 10

你不应该释放任何地址,但是那些地址malloc(),calloc()或者realloc().并p + 20没有这样的地址. http://codepad.org/FMr3dvnq向您显示这样的free()可能会失败.

free()函数释放ptr指向的内存空间,该内存空间必须由之前调用malloc(),calloc()或realloc()返回.否则,或者如果之前已经调用了free(ptr),则会发生未定义的行为.如果ptr为NULL,则不执行任何操作.

传递给free()的指针是否必须指向内存块的开头,还是指向内部?也值得一读.

即使你可以使用free()任何指向malloc内存的指针 - 你可以释放它两次,因为你free()在该区域内调用了多个内存.双重释放是邪恶的,因为它们可能导致安全漏洞.