gpt4 book ai didi

c - 增加带有 Realloc 的结构的大小(第二次增加时出错)

转载 作者:太空宇宙 更新时间:2023-11-04 03:41:53 25 4
gpt4 key购买 nike

我是一名初级程序员,正在尝试为需要使用动态结构的大学类(class)做一个项目。我的问题:我使用 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;
}

我是如何在 main 上面声明的:

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;
}

其他注意事项:readintenger - 从键盘读取整数的基本功能cleanstdin - 基本的清除标准函数checkmenuoption - 从菜单中检查选项的功能counters - 帮助结构索引的计数器

如果您需要其他任何东西来理解或帮助我,请告诉我。提前致谢。

最佳答案

  1. 最好在这里而不是在异地发帖

  2. 站外代码(发布在已删除的答案中)通过 addToQueue() 调用 reallloc(),并带有一个已准备就绪的指针 ' d.

     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 - 增加带有 Realloc 的结构的大小(第二次增加时出错),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27800336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com