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 );
конечно со всеми проверками на нуль и т.п.
|
|