我只是在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()在该区域内调用了多个内存.双重释放是邪恶的,因为它们可能导致安全漏洞.