Имя: Пароль:
IT
 
Как правильно сделать realloc элемента структуры ?
0 Ковычки
 
23.04.13
13:23
если так

void xxx ( ppp * p )
{
   char x[11] = "Вася пупкин";
   p->xxx = (char * ) realloc ( p->xxx, sizeof ( char * ) * strlen ( x ) + 1 );
   *p->xxx = '\0';
   strcpy ( p->xxx, x );
}

(код условен, но абсолютно подобен)

то валидатор памяти соответственно говорит о пропащих байтах

==51788== 272 bytes in 1 blocks are definitely lost in loss record 21 of 27
==51788==    at 0x4C245E2: realloc (vg_replace_malloc.c:525)
==51788==    by 0x409C0A: set_user_options (pop_pass_x.c:2010)
...
1 Ковычки
 
23.04.13
14:06
Оказывается новый указатель приравнять и все - никогда не понимал си - бредовейшее изобретение.

char * ptr = ( char * ) realloc ( p->xxx, sizeof ( char * ) * ( strlen ( x ) + 1 ) );
*ptr = '\0';
p->xxx = ptr;
strcpy ( p->xxx, x );
free ( ptr );

конечно со всеми проверками на нуль и т.п.
AdBlock убивает бесплатный контент. 1Сергей