在动态结构阵列使用的realloc(Using realloc in dynamic structu

2019-10-21 10:18发布

我尝试使用realloc的动态创建一个结构的情况下,从临时搭建的数据加油吧,我去。 当到达行的malloc结构的第二时间的指针,但我不知道我应该如何构建这个函数程序崩溃。 我有以下代码:

#define MAX_STRING 50

struct data {
int ref; 
int port;
char data[MAX_STRING+1];
}valid, invalid;

void read_file(FILE *file);
void validate(struct data* temp); 

int g = 0;

int main(){

    char inputfile[100];
    FILE *file = fopen("file.txt" , "r");

    if (file != NULL){
       read_file (file);
    }

    else{
    // Some code here..
    }

    return 0;
}  

void read_file(FILE *file){

    struct data* temp = malloc(sizeof(struct data));

    char buf[1024];
    while(!feof(file)){

       fgets(buf, sizeof buf, file))

       sscanf(buffer, "%d.%d.%s", &temp->ref, &temp->port,  &temp->data);

       validate(temp);
       g++;

    }
}

void validate(struct data* temp){

    if((some condition) && (some condition))
    {
        create_valid(temp);
    }

    if((some condition) && (some condition))
    {
        create_invalid(temp);
    }
}

我不确定如何构建如下功能:

int create_vaild(struct data* temp){

    struct data* valid = malloc(sizeof(struct data)); <<<<<<<<< Line that crashes 

    valid = realloc(valid, g * sizeof(struct data));

    valid[g] = *temp;

    if (valid[g] == NULL){
        //error.
    };
    printf("\n%i:%i:%s\n", (valid+g)->ref, (valid+g)->port, (valid+g)->data);



return 0;

}

Answer 1:

我看到一个潜在的问题:

你有G设置为0,即

int g =0;

你是不是增加它的调用之前create_valid() 您正在使用这个值来分配功能的内部记忆:

valid = realloc(valid, g * sizeof(struct data));

所以,现在g0

下一行后来取消引用该指针

valid[g] =  *temp;

这是你没有分配为一些内存realloc()为您becasue您通过0到it.Hence崩溃并没有分配内存。



文章来源: Using realloc in dynamic structure array