我正在做的很简单:将消息缓冲区重新分配到一个大小(size_t)更大: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
我的代码非常简单,我发现没有错误隐藏的地方:
#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;
}
答案 0 :(得分:4)
您的计划出错。在函数 realloc_test()中更改行
message=(int*)realloc(message,n+1);
到
message=(int*)realloc(message,(n+1)*sizeof(int));
我认为这可以解决您的问题。