我要做的很简单:将消息缓冲区重新分配到一个大小(Size_t)的larger:size+1,但是我的原始内容被修改了( '33‘是怎么出来的?):
message:0x9ead008
0:0 0 0 0 0 0 0 0 0 0
message:0x9ead008
0:0 0 0 33 0 0 0 0 0 0 0 我的代码非常简单,以至于我找不到bug可以隐藏的地方:
#include <stdlib.h>
#include <string.h>
void print_message(int* message,long n)
{
int i;
for(i=0;i<n;i++)
{
if(i%48==0)
printf("\n%3d:",i/48);
printf("%d ",message[i]);
}
printf("\n");
}
void realloc_test()
{
int n=10;
int* message=(int*)malloc(n*sizeof(int));
printf("message:%p\n",message);
print_message(message,n);
memset(message,0,n);
message=(int*)realloc(message,n+1);
printf("message:%p\n",message);
print_message(message,n+1);
free(message);
}
int main(int argc,char* argv[])
{
realloc_test();
return 0;
}发布于 2010-12-20 16:22:47
您的程序中存在错误。在function realloc_test()中更改行
message=(int*)realloc(message,n+1);至
message=(int*)realloc(message,(n+1)*sizeof(int));我想这会解决你的问题。
https://stackoverflow.com/questions/4487788
复制相似问题