LINUX.ORG.RU

Траблы с памятью


0

0

есть 2-мерный массив строк...
хочу у одной из них изменить размер...


char **item = 0;
dirlst = CDKgetDirectoryContents (".", &item);

int x=0; struct stat fileStat;

for (x = 0; x < dirlst; x++)
if (lstat (item[x], &fileStat) == 0)
if (((fileStat.st_mode & S_IXUSR) != 0) ||
((fileStat.st_mode & S_IXGRP) != 0) ||
((fileStat.st_mode & S_IXOTH) != 0))
{
if (mode2Filetype(fileStat.st_mode)=='d')
{
realloc(item[x],sizeof(item[x])+sizeof(char));
strcat(item[x],"/");

}
else
{
realloc(item[x],sizeof(item[x])+sizeof(char));
strcat(item[x],"*");
}

valgrind каже шо фигня:
=28454== Invalid read of size 1
==28454== at 0x1B904132: strcat (mac_replace_strmem.c:143)
==28454== by 0x806092C: new_prog() (new_prog.cpp:236)
==28454== by 0x805FA00: main (main.cpp:200)
==28454== Address 0x1C971408 is 0 bytes inside a block of size 3 free'd
==28454== at 0x1B9053EE: realloc (vg_replace_malloc.c:197)
==28454== by 0x8060906: new_prog() (new_prog.cpp:235)
==28454== by 0x805FA00: main (main.cpp:200)

хотя компилятор ошибок не показует и прога вроде работает...

anonymous

item[x] = realloc(item[x],strlen(item[x])+2);

ananas ★★★★★
()
Ответ на: комментарий от Reset

результат realloc - это фигня. а вот sizeof(item[x]) для получения размера занимаемой памяти - это действительно серьезная лажа, из-за которой сегфолты возникают

ananas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.