Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果重新分配结构,Realloc将继续返回NULL_C_Struct_Realloc - Fatal编程技术网

如果重新分配结构,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
not
PASSENGER\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
not
PASSENGER\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
可能不再有效。我将重新编码,稍后再亲自查看。谢谢你的快速回复,我今天学到了一些新东西。