C++ 更改指针后将释放多少字节的free()?
我有下面的代码C++ 更改指针后将释放多少字节的free()?,c++,c,malloc,free,C++,C,Malloc,Free,我有下面的代码 char* p = malloc(10); p = p + 1; free(p); 在上述代码中 调用malloc(10)时,malloc如何返回内存地址 将释放多少字节的空闲(p) free()如何知道要释放多少字节 正如free的手册页所示,除了从malloc返回的指针之外,任何参数都有未定义的行为: free()函数释放ptr指向的内存空间,该内存空间必须由以前对malloc()、calloc()或realloc()的调用返回。否则,或者如果之前已经调用了free(ptr
char* p = malloc(10);
p = p + 1;
free(p);
在上述代码中
正如
free
的手册页所示,除了从malloc
返回的指针之外,任何参数都有未定义的行为:
free()函数释放ptr指向的内存空间,该内存空间必须由以前对malloc()、calloc()或realloc()的调用返回。否则,或者如果之前已经调用了free(ptr),则会发生未定义的行为。如果ptr为NULL,则不执行任何操作
关于free
如何知道块的大小:一个典型的内存分配器实现对每个块都有一个头(包含大小、自由列表指针等),并且free
知道这个头的大小以及与malloc
返回的指针的偏移量
这也回答了您的第一个问题:
malloc
分配这样一个块并返回指向实际对象开头的指针。这样做是未定义的行为。不允许将修改后的指针传递给free。你能指望的最好是撞车,你必须得到一个error@purec,很遗憾不是,这是未定义的行为。我的编译器在“%a.out”中给我错误***错误:free():无效指针:0x086e9009***中止非常好!谢谢你的解释。