инициализация структуры, содержащей указатель на другую структуру - PullRequest
0 голосов
/ 22 сентября 2018

Так что я заранее извиняюсь за то, что, возможно, не смог сформулировать это очень хорошо.Я довольно новичок в этом и учусь по мере продвижения вперед.Я ищу для инициализации структуры, которая имеет указатель структуры на другую структуру внутри него.Проверьте ниже.

struct GraphicElement {
    char* fileName;
    struct GraphicElement* pNext;
    };
struct RasterGraphic {
    struct GraphicElement* GraphicElements;
};

Я пишу функции для добавления или удаления графических элементов, но перед этим я вызываю функцию, где я хотел бы выполнить инициализацию, в которой у меня возникают проблемы.

int main(void)
{
    char response;
    BOOL RUNNING = TRUE;
    struct RasterGraphic RG;
    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
    InitRasterGraphic(&RG);
}

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

void InitRasterGraphic(struct RasterGraphic* pA)
{

pA->GraphicElements = malloc(sizeof(struct GraphicElement));
pA->GraphicElements = 0;
return; 
}

Я пробовал много других вещей, но, похоже, ни одна из них не работает с тем, что я хочу сделать.Я хочу все инициализировать.У меня есть другая функция, которая печатает элементы, но она падает, и я получаю ошибку, что не может прочитать память, где находятся fileName и pNext.Опять же, это первый раз, когда я размещаю вопрос здесь.Я надеюсь, что я покрыл все мои базы, и что я спросил это правильно.Спасибо.

1 Ответ

0 голосов
/ 22 сентября 2018

Вы инициализируете pA->GraphicElements в NULL сразу после malloc, если это неправильно и это приводит к утечке памяти.

Возможно, вы захотите попробовать, как показано ниже.

void InitRasterGraphic(struct RasterGraphic* pA)
{
   pA->GraphicElements = malloc(sizeof(struct GraphicElement));

   if (pA->GraphicElements == NULL) return;

   pA->GraphicElements->pNext = NULL;
   pA->GraphicElements->fileName = NULL;

   /** or
    pA->GraphicElements->fileName = malloc(sizeof(char)*(somelength));
    */

   return; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...