为什么在这里realloc修改原始内容?

时间:2010-12-20 07:53:57

标签: c posix

我正在做的很简单:将消息缓冲区重新分配到一个大小(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;   
}

1 个答案:

答案 0 :(得分:4)

您的计划出错。在函数 realloc_test()中更改行

message=(int*)realloc(message,n+1);

message=(int*)realloc(message,(n+1)*sizeof(int));

我认为这可以解决您的问题。