У меня проблема с функцией free () в C linux.Вот мой пример кода:
typedef struct
{
char index[2];
char color[2];
char duration[2];
} ps;
ps *_ps = NULL;
Мне нужно многократно выделять и освобождать вышеуказанную структуру, используя следующую функцию:
ps * readMatrix(mmc_item_item_screen *_item_screen,int rows,int skip)
{
if(_ps)
{
free(_ps);
_ps=(ps *)NULL;
}
_ps=(ps *)calloc(rows-1,sizeof(ps));
memset(_ps,'\0',((rows-1)*sizeof(ps)));
int i=0;
for(i=0;i<rows;i++)
{
if((i+1)>=skip)
{
sprintf(_ps[i].index,"%d",i);
sprintf(_ps[i].color,"%s",getCDKMatrixCell(_item_screen->matrix,i+2,1));
sprintf(_ps[i].duration,"%s",getCDKMatrixCell(_item_screen->matrix,i+2,2));
}
else
{
sprintf(_ps[i].index,"%d",i);
sprintf(_ps[i].color,"%s",getCDKMatrixCell(_item_screen->matrix,i+1,1));
sprintf(_ps[i].duration,"%s",getCDKMatrixCell(_item_screen->matrix,i+1,2));
}
}
return _ps;
}
main()
{
while(1)
....
_ps=readMatrix(_item_screen,rows,getCDKMatrixRow(_item_screen->matrix));
....
}
При первом вызове вышеуказанной функции _psNULL, поэтому free () не вызывается.но во второй раз (_ps уже выделено), программа вылетает, как только вызывается free ().
Можете ли вы помочь мне с этим?
(ps и _ps оба глобальные)
Спасибо. Edit1 Я поставил всю функцию, которая манипулирует _ps.и это единственная функция, работающая на _ps.не могли бы вы помочь пожалуйста?