缩小char时,realloc()的行为不符合预期*

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()的理解错误?

Wil*_*ell 6

你误解了realloc.realloc不一定会将数据移动到新位置,并且由于您缩小了内存,因此几乎可以肯定(取决于实现).它不(必然)修改原始内容,在您的情况下它没有.您的程序正在调用未定义的行为,除程序外没有错误.(puts使用不指向空终止字符串的char*调用是一个错误.)

  • @Olaf嗯,它对我来说看起来很清楚. (3认同)