我是一个乞丐程序员,试图为一个需要使用动态结构的大学课程做一个项目。
我的问题:
我使用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/