如果重新分配结构,Realloc将继续返回NULL
不要介意我的代码编写风格。我专门为测试目的创建了这个 现在谈谈问题:如果重新分配结构,Realloc将继续返回NULL,c,struct,realloc,C,Struct,Realloc,不要介意我的代码编写风格。我专门为测试目的创建了这个 现在谈谈问题: #include <stdio.h> #include <string.h> #include <stdlib.h> #define EMB 31 #define NAME_MAX 50 struct TRIP { char TRIP_NAME[EMB]; int TRIP_TIME; }; struct DATE { int day; int mo
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define EMB 31
#define NAME_MAX 50
struct TRIP {
char TRIP_NAME[EMB];
int TRIP_TIME;
};
struct DATE {
int day;
int month;
int year;
};
struct TRIP_INFORMATION {
char TRIP_NUMBER[EMB];
char EMBARKATION_POINT[EMB];
char SPECIFIC_DROPOFFPOINT[EMB];
char EXIT_DROPOFFPOINT[EMB];
struct DATE TRIP_DATE;
struct TRIP SPECIFIC_TRIP;
};
struct EMBARKATION_CARD{
//struct DATE TRIP_DATE;
char NAME[NAME_MAX];
int ID_NUMBER;
int PRIORITY_NUMBER;
//int TRIP_TIME;
//char EMBARKATION_POINT[EMB];
//char DROPOFFPOINT[EMB];
struct TRIP_INFORMATION TRIP_INFORMATION;
};
#包括
#包括
#包括
#定义教统局31
#定义名称\u最大值50
结构跳闸{
char TRIP_名称[EMB];
国际旅行时间;
};
结构日期{
国际日;
整月;
国际年;
};
结构跳闸信息{
char TRIP_编号[EMB];
上落客货点[教统局];
字符特定_衰减点[EMB];
char EXIT_DROPOFFPOINT[EMB];
结构日期行程日期;
结构跳闸特定的跳闸;
};
结构登机卡{
//结构日期行程日期;
字符名[NAME_MAX];
国际身份证号码;
int优先级_编号;
//国际旅行时间;
//上落客货点[教统局];
//煤焦排放点[EMB];
结构跳闸信息跳闸信息;
};
这是供申报时参考
int BeginEmbarkationProcess(int *PASSENGER_COUNT, struct EMBARKATION_CARD * PASSENGER_TO_SAVE, int curr_day, int curr_month, int curr_year){
//struct EMBARKATION_CARD * P;
if(*PASSENGER_COUNT>1){
PASSENGER_TO_SAVE = realloc(PASSENGER_TO_SAVE, *PASSENGER_COUNT * sizeof(struct EMBARKATION_CARD));
if(PASSENGER_TO_SAVE == NULL){
puts("PASSENGER_TO_SAVE VARIABLE = HAS NOT ALLOCATED MEMORY");
return -1;
}
}
if(PASSENGER_TO_SAVE==NULL){
puts("PASSENGER TO SAVE POINTER HAS UNABLE TO ALLOCATE MEMORY");
return -1;
}
int x = 0;
for(x=0;x<*PASSENGER_COUNT;x++){
((PASSENGER_TO_SAVE+x))->ID_NUMBER = (x+1)*30;
((PASSENGER_TO_SAVE+x))->PRIORITY_NUMBER = (x+1)*17;
}
for(x=0;x<*PASSENGER_COUNT;x++){
printf("%d %d\n", (PASSENGER_TO_SAVE+x)->ID_NUMBER , (PASSENGER_TO_SAVE+x)->PRIORITY_NUMBER);
}
*PASSENGER_COUNT = *PASSENGER_COUNT + 1;
int r;
printf("ENTER -1 TO TERMINATE THIS LOOP\n");
scanf("%d", &r);
return r;
}
int main(){
//doIt();
struct EMBARKATION_CARD* E = malloc(sizeof(struct EMBARKATION_CARD));
int ct = 1;
int s = BeginEmbarkationProcess(&ct, E, 3, 3, 2020);
while(s!=-1){
s = BeginEmbarkationProcess(&ct, E, 3, 3, 2020);
}
return s;
}
int开始登船流程(int*乘客计数、结构登机卡*乘客保存、int当前日、int当前月、int当前年){
//结构登机卡*P;
如果(*乘客人数>1){
乘客保存=realloc(乘客保存,*乘客计数*结构登机卡尺寸);
如果(乘客到乘客保存==NULL){
puts(“乘客存储变量=未分配内存”);
返回-1;
}
}
如果(乘客到乘客保存==NULL){
puts(“保存指针的乘客无法分配内存”);
返回-1;
}
int x=0;
对于(x=0;xID_数=(x+1)*30;
((乘客号至乘客号保存+x))->优先级号=(x+1)*17;
}
对于(x=0;乘客号(乘客号至乘客号保存+x)->优先号);
}
*乘客人数=*乘客人数+1;
INTR;
printf(“输入-1终止此循环\n”);
scanf(“%d”、&r);
返回r;
}
int main(){
//doIt();
结构登机卡*E=malloc(sizeof(结构登机卡));
int-ct=1;
int s=开始登陆流程(和ct,E,3,3,2020);
而(s!=-1){
s=开始登陆流程(和ct,E,3,3,2020);
}
返回s;
}
由于我复制粘贴了这段代码(并删除了一些注释掉的行,但最终对此感到厌倦),因此复制粘贴的代码可能有一些语法错误。请忽略这些语法错误
问题是realloc将继续返回NULL。
这使我无法重新调整它
谁能告诉我到底发生了什么事。
我知道我可能在这里犯了一些错误,但我想了解一下
是的,我只是一名学习C语言的学生。
p=realloc
和if(PASSENGER\u TO\u SAVE==NULL)
不正确。您需要检查/使用p
notPASSENGER\u TO\u SAVE
返回指向重新定位的内存的指针。它不能(也不会)更改传入的指针。我看不到您检查了realloc
的返回值,即P
。您将输入指针PASSENGER\u TO\u SAVE
与NULL
进行比较。等等,我想我忘了将P替换为PASSENGER\u TO\u SAVE。更改它是因为其他选项。P最初是PASSENGER\u TO_当我写这个问题时,用P=realloc保存。即使如此,我还是运行了代码,仍然遇到了同样的问题。请记住,C通过复制函数参数来传递函数参数。无论在函数内部做什么,都不会影响传递的变量:struct bountation\u CARD*PASSENGER\u to\u SAVE
您不能将PASANGER\u更改为_在你的函数中保存
。这意味着在第一次调用realloc
后,你在main
中的E
可能不再有效。我会重新编码,稍后自己看。谢谢你的快速回复,我今天学到了一些新东西。P=realloc
和if(PASSENGER\u to\u SAVE==NULL)
不正确。您需要检查/使用P
notPASSENGER\u来保存
realloc
返回指向重新定位内存的指针。它不能(也不会)返回更改传入的指针。我看不到您检查了realloc
的返回值,即P
。您将输入指针PASSENGER\u TO\u SAVE
与NULL
进行比较。等等,我想我忘了将P替换为PASSENGER\u TO\u SAVE。更改它是因为其他选项。P最初是PASSENGER\u TO_当我写这个问题时,用P=realloc保存。即使如此,我还是运行了代码,仍然遇到了同样的问题。请记住,C通过复制函数参数来传递函数参数。无论在函数内部做什么,都不会影响传递的变量:struct bountation\u CARD*PASSENGER\u to\u SAVE
您不能将PASANGER\u更改为_在你的函数中保存
。这意味着在第一次调用realloc
后,你在main
中的E
可能不再有效。我将重新编码,稍后再亲自查看。谢谢你的快速回复,我今天学到了一些新东西。