我意识到下面的代码示例是你不应该做的.我的问题只是一个兴趣.如果你分配一个内存块,然后移动指针(一个no-no),当你释放内存时,释放块的大小是多少,内存在哪里呢?以下是设计的代码段:
#include <stdio.h> #include <string.h> int main(void) { char* s = malloc(1024); strcpy(s,"Some string"); // Advance the pointer... s += 5; // Prints "string" printf("%s\n",s); /* * What exactly are the beginning and end points of the memory * block now being deallocated? */ free(s); return 0; }
这是我认为我发生的事情.被释放的内存块以“string”中的字母“s”开头.持有“Some”的5个字节现在已丢失.
我想知道的是:内存中的5个字节的位置是否在原始的1024个字节结束之后立即释放,还是只剩下一个?
任何人都知道编译器是做什么的?是不是有定义?
谢谢.
解决方法
你不能传递一个没有从malloc,calloc或realloc获取到的空格(NULL除外)的指针.
C0 FAQ中的Question 7.19与您的问题相关.