S..*_*..K 3 c malloc free pointers memory-management
int main()
{
char *s1, *sTemp;
s1 = (char*)malloc(sizeof(char)*7);
*(s1 + 0) = 'a';
*(s1 + 1) = 'b';
*(s1 + 2) = 'c';
*(s1 + 3) = 'd';
*(s1 + 4) = 'e';
*(s1 + 5) = 'f';
*(s1 + 6) = '\0';
sTemp = (s1 + 3);
free(sTemp); // shud delete d onwards. But it doesn't !!
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你好,
在上面的C中,代码sTemp应指向超出的第3个单元格s1(由'd'占用)所以在调用时free(sTemp)我希望从此位置开始删除某些内容.
(我故意提到' 某事 ',因为我的实验最初的动机是找出free()ing工作的位置)
但是我收到一个SIGABRT在free().
怎么free()知道这不是大块的开始.相应地,我们只能从块的开始释放内存吗?[他们只是free()可以接受的可自由指针吗?]
期待回复:)
从手册页
free()释放指向的内存空间ptr,该内存空间必须由之前的调用返回malloc(),calloc()或者realloc().否则,或者如果free(ptr)之前已经调用过,则会发生未定义的行为.
资料来源:http://linux.die.net/man/3/free