Lef*_*ris 5 c pointers pointer-arithmetic
我的问题非常简单.说我们有:
char* ptr = (char*) malloc(sizeof(char)*SIZE);
ptr+= SIZE/2;
free(ptr);
Run Code Online (Sandbox Code Playgroud)
当我们释放指针时会发生什么?是不确定的操作?它是否释放所有SIZE缓冲区或仅剩余的SIZE/2?在此先感谢您为我消除歧义.
Gui*_*i13 10
您的程序可能会崩溃:free()操作在C中实际上非常简单,但仅适用于原始分配的地址.
典型的内存分配器就像这个伪代码一样工作:
因此,当您调用时free(ptr),分配器会在指针前输入6个字节来检查签名.如果它没有找到签名,它会崩溃:)
如果参数与free()先前通过malloc()和朋友分配的指针不匹配,则行为未定义.您很可能在您的版本中遇到分段错误或失败的断言libc.
Offtopic:你最好没有把结果malloc()用C表示.