Сбой PIC32 (неверный указатель) при вызове malloc после использования free()

Я работаю над проектом, включающим 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);

не работает так же (так что нет ошибки в параметрах функции или что-то).

У вас есть идеи, что может быть причиной этого?

0 ответов

Другие вопросы по тегам