我是一个乞丐程序员,试图为一个需要使用动态结构的大学课程做一个项目。
我的问题:
我使用realloc来增加我的结构的大小,它第一次起作用,但第二次不起作用。我用来接收新增加的结构的辅助指针似乎在第二次使值为NULL。
这是我目前的代码:
我试图增加结构的功能:

TList *addToQueue (TList *plist, int *counter, char departure)
{
    TList *auxiliary;
    auxiliary = NULL;

    auxiliary = realloc(plist,(*counter+1)*sizeof(TList));

    if (auxiliary == NULL)
    {
        printf("Insufficient Memory");
        cleanstdin();
    }
    else
    {
        plist = auxiliary;
        plist[*counter].departure = departure;

        do{
        printf("\nPoint of Arrival: ");
        plist[*counter].arrival = checkMenuOption(OPTIONSLOC);
        }while(plist[*counter].arrival == '\0');

        printf("\nNumber of passengers:");
        plist[*counter].numberOfPassengers = readIntenger(MIN_SEATS, MAX_SEATS);

        (*counter) ++;

        printf("\nTicket Purchased successfully");
        cleanstdin();

    }
    return plist;
}

我是如何声明以上主要:
TList *addToQueue (TList *plist, int *counter, char departure);

我怎么称呼main:
字符离开;
            departure = sellTicketsMenu ();

            switch (departure)
            {
            case 'A':
            {
                ListA = addToQueue (ListA, &counterA, departure);
                cleanstdin();
            }
            break;
            case 'B':
            {
                ListB = addToQueue (ListB, &counterB, departure);
                cleanstdin();
            }
            break;
            case 'C':
            {
                ListC = addToQueue (ListC, &counterC, departure);
                cleanstdin();
            }
            break;
            }

其他注意事项:read intenger-从键盘读取intenger的基本功能
清洁标准-基本清洁标准功能
checkmenuoption-从菜单中选择选项的功能
计数器-帮助索引结构的计数器
如果你还需要了解或帮助我,请告诉我。
提前谢谢。

最佳答案

最好贴在这里而不是场外
场外代码(张贴在已删除的应答中)调用reallloc(),通过addToQueue(),指针已全部就绪。

 case 'C':
   ...
   free(ListA);
   switch (optionMTI) {
     case 'A': {
       ...
       ListA = addToQueue (ListA, &counterA, departure);

问题是重复使用自由指针。
如果代码要在free()之后重新使用指针,请确保将其分配给NULL
            // Fixed code
            free(ListA);
            ListA = NULL;  // add
            ...
            ListA = addToQueue (ListA, &counterA, departure);

关于c - 带重新分配的结构的增加大小(第二次增加时出错),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27800336/

10-11 06:29