зачем здесь realloc модифицировать оригинальный контент? - PullRequest
0 голосов
/ 20 декабря 2010

То, что я делаю, просто: перераспределить буфер сообщений на один размер (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 Ответ

4 голосов
/ 20 декабря 2010

В вашей программе есть ошибка. В функции realloc_test () изменить строку

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

до

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

Я думаю, что это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...