0

我正在从事一个涉及 PIC32MX220f032b 的项目,在该项目中,我必须使用动态内存分配来在链表中声明未知数量的结构。

malloc 调用和一切工作正常,直到我继续实施数据的删除。这个想法是分配一些结构并用数据填充它们(一些通过指针)。在某个时间点,所有已知的结构都被释放并声明了新的结构。

仅分配的第一个测试工作了大约三轮,直到内存不足(可以理解)。但是当我实现一个函数来释放数据结构时,malloc 不再起作用。它的函数调用使图片崩溃,并将其发送到带有指针错误的异常处理程序。但我不知道为什么...

我使用以下结构:

typedef struct image_element
{
    unsigned char conditional;
    unsigned char datafield;
    unsigned char comparisonType;
    unsigned char compareValue;
unsigned char *filename;
unsigned char active;

unsigned short xSize;
unsigned short ySize;
unsigned short xStart;
unsigned short yStart;

struct image_element *next;
}screen_image_element;

在代码中,我使用 malloc 分配结构和文件名指针:

screen_image_element *tempElement; 
tempElement = (screen_image_element *) malloc(sizeof(screen_image_element));

char *tmp;
tmp = (char *) malloc(somevalue); //somevalue is known
// fill tmp with a string
(*tempElement).filename = tmp;

在分配和使用所有内容之后(注意:这个功能就像一个魅力)我想释放所有数据字段并重新开始:

void deleteMenu()
{

    screen_image_element *temp;

    while (image_elements) //image elements is the first struct in the linked list at this point
    {
        temp = image_elements->next; //save the next pointer
        free(image_elements->filename); // free the data behind the filename pointer
        free(image_elements); //free the rest of the struct
        image_elements = temp; // put the next struct as first and loop
    }
}

我无法测试它的功能,因为据我所知,免费不提供任何返回值,并且看不到当前的内存使用情况。直到此时,图片仍在运行。但是当我尝试再次分配内存时,图片崩溃(异常处理程序调用原因为 0x07:错误指针)。问题似乎源于 malloc 函数调用内部:

malloc(18);

效果不佳(因此函数参数或其他内容没有错误)。

你知道这可能是什么原因吗?

4

0 回答 0