PIC32 сбой (плохой указатель) на таНос вызова после использования свободного ()

голоса
0

Я работаю над проектом с участием PIC32MX220f032b, в котором я должен использовать динамическое выделение памяти, чтобы объявить неизвестное количество структур в связанном списке.

В таНос звонки и все работало хорошо, пока я не пошел на реализацию удаления данных. Идея заключается в том, чтобы выделить ряд структур и заполнить их с данными (некоторые через указатели). В определенный момент времени, все известные структуры являются освобождены, новые из них объявлены.

Первое испытание только с распределением работало в течение трех раундов, пока он не выбежал из памяти (понятно). Но когда я реализовать функцию, чтобы освободить структуры данных, таНос больше не функционирует. Это вызов функции происходит сбой ПОС и отправляет его в обработчик исключений с ошибкой указателя. Но я не могу понять, почему ...

Я использую следующую структуру:

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;

В коде, я выделить структура и это имя файла указатель с таНосом:

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(18);

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

Есть ли у вас какие-либо идеи, что может быть причиной этого?

Задан 07/07/2015 в 13:40
источник пользователем
На других языках...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more