在上一个问题之后,我在这里:

Copying a string from a pointer to a string

我现在正在尝试将复制的字符串添加到动态数组中,该数组的大小将根据SD卡上的文件数逐渐增加,并且在卡以某种方式换出/更改后将重新创建。

这段代码在第一次就可以正常工作。更改SD卡的内容后,将调用reReadSD()函数并释放fileList。读取SD卡的新内容并将新值写入fileList,但是,从fileList打印名称时,我得到的是符号而不是专有名称。我认为这是在释放fileList并将其重新初始化上的错误,因为同一代码块可以在系统加电时起作用(第一次调用reReadSD时),但是第二次调用时却不是。谁能对此有所启示?

void reReadSD()
{
    free(fileList);
    files_allocated=0;
    num_files=0;
    reRead_flag=0;


    if(f_mount(0, &fatfs ) != FR_OK ){
        /* efs initialisation fails*/
    }//end f_mount

    FRESULT result;
    char *path = '/'; //look in root of sd card
    result = f_opendir(&directory, path);   //open directory
    if(result==FR_OK){
        for(;;){
            result = f_readdir(&directory, &fileInfo); //read directory
            if(result==FR_OK){
                if(fileInfo.fname[0]==0){break;} //end of dir reached escape for(;;)
                if(fileInfo.fname[0]=='.'){continue;} //ignore '.' files
                TCHAR* temp;
                temp = malloc(strlen(fileInfo.fname)+1);
                strcpy(temp, fileInfo.fname);
                AddToArray(temp);
            }//end read_dir result==fr_ok
        }//end for(;;)
    }//end open_dir result==fr_ok
}//end reReadSD


和..

void AddToArray (TCHAR* item)
{
    u32 delay;
    if(num_files == files_allocated)
    {

        if (files_allocated==0)
                files_allocated=5; //initial allocation
        else
                files_allocated+=5; //more space needed

        //reallocate with temp variable
        void *_tmp = realloc(fileList, (files_allocated * sizeof(TCHAR*)));

        //reallocation error
        if (!_tmp)
        {
                LCD_ErrLog("Couldn't realloc memory!\n");
                return;
        }

        fileList = _tmp;

    }//end num_files==files_allocated

    fileList[num_files] = item;
    num_files++;

}//end AddToArray


与..

TCHAR **fileList;
u32 num_files=0;
u32 files_allocated=0;

最佳答案

就我而言,您在数据段中声明了fileList指针。因此它的初始值为NULL。当您重新分配时,它的行为就像malloc。但是当您释放它时,它仍然指向某个位置,并且重新分配失败。您可能应该设置fileList = NULL才能生存。

希望这可以帮助。

关于c - 释放动态数组中的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7201544/

10-12 15:09