是否有一些"可自由"的记忆

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工作的位置)

但是我收到一个SIGABRTfree().

怎么free()知道这不是大块的开始.相应地,我们只能从块的开始释放内存吗?[他们只是free()可以接受的可自由指针吗?]

期待回复:)

Dan*_*ite 7

从手册页

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

资料来源:http://linux.die.net/man/3/free