J.D*_*Doe 3 c memory memory-management
我试图用realloc()缩小指针"ptr",如下面的示例代码所示:
char * ptr = malloc(sizeof(char) * 7);
int i;
for(i = 0;i<7;i++){
ptr[i]= "pointer"[i];
}
puts(ptr);
ptr = realloc(ptr,sizeof(char) * 3);
puts(ptr);
free(ptr);
Run Code Online (Sandbox Code Playgroud)
期望代码释放未使用的内存我认为它会返回以下内容:
pointer
poi
Run Code Online (Sandbox Code Playgroud)
但是,它会返回:
pointer
pointer
Run Code Online (Sandbox Code Playgroud)
这是编译器的错误,还是我对realloc()的理解错误?
你误解了realloc.realloc不一定会将数据移动到新位置,并且由于您缩小了内存,因此几乎可以肯定(取决于实现).它不(必然)修改原始内容,在您的情况下它没有.您的程序正在调用未定义的行为,除程序外没有错误.(puts使用不指向空终止字符串的char*调用是一个错误.)
| 归档时间: |
|
| 查看次数: |
434 次 |
| 最近记录: |