c - free 函数又出问题了!!!(C linux)

标签 c linux free

我在 C linux 中遇到 free() 函数的问题。这是我的示例代码:

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));
....
}

我第一次调用上述函数时,_ps 为 NULL,因此未调用 free()。但是第二次(_ps 已经分配),一旦调用 free() 程序就会崩溃。

你能帮我解决这个问题吗?

(ps和_ps都是全局的)

谢谢。 Edit1 我把操作 _ps 的整个函数都放在了。这是唯一在 _ps 上工作的函数。你能帮忙吗?

最佳答案

您没有发布足够的代码,但是 IMO,您说过 ps 和 _ps 是全局的,所以一旦您释放 _ps,它可能会在您的程序的其他地方使用,从而导致它崩溃。 我建议您检查一下程序,看看在哪里使用了 _ps,或者向我们提供更多代码。

希望这对您有所帮助。

关于c - free 函数又出问题了!!!(C linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6925277/

相关文章:

我们可以使用之前释放的指针吗?

c - 如何在后台执行僵尸进程后避免它们

c - C 中带有通过 FIFO 管道的指针的结构

linux - 如果子进程在后台启动并且父进程已经退出,如何知道父进程

clock_nanosleep 不工作?

c - 有没有一种方法可以可靠地分配与先前释放的 block 相同的内存块,然后访问先前在其中的内容?

c - 关于我的模块化代码在 C 中使用 void* 作为动态数据类型的几个问题

c - 如何在c中读取文件中的单词后存储值

c - 头文件中的函数定义(c 使用 gcc)

c - sem_t的结构和信号量的实现