c-将动态结构传递给函数时的分段故障(核心转储)



我正试图让它为我的任务工作,但我一直遇到分段错误,但我看不出有问题。

struct line{
        int source;
        int dest;
        int type;
        int port;
        char data[51];
};

int main(){
    struct line *dataIn;
    dataIn = malloc(sizeof(struct line));
    int nRecords = 0;
    readFile(&nRecords, dataIn);
    int i=0;
    for(i = 0; 1 < 100; i++){
        printf("Source: %d Data: %sn", dataIn[i].source, dataIn[i].data);
    }
    return 0;
}
void readFile(int *nRecords, struct line *dataIn){
    FILE *fileIn;
    fileIn =fopen("data.txt","r");
    if (!fileIn){
        puts("File Open Error");
        return 1;
    }
    while(fscanf(fileIn, "%d:%d:%d:%d:%[^n]", &dataIn[*nRecords].source, &dataIn[*nRecords].dest, &dataIn[*nRecords].type, &dataIn[*nRecords].port, dataIn[*nRecords].data) == 5){
        nRecords++;
        dataIn = realloc(dataIn,(*nRecords+1)*sizeof(struct line));
    }
    fclose(fileIn);
}

此外,当我在顶部添加功能原型时:

void readFile(int*, struct line*);

我得到错误:

"readFile"的类型冲突

C使用传递值传递函数参数。在代码中,dataIn本身使用pass-by-value传递给readFile()

现在,dataIn本身就是一个指针,您可以从函数中更改dataIn的内容,但不能从函数中修改dataIn本身(查看realloc()),并期望其反映回main()

因此,返回后,您的dataIn只有一个元素,就像以前的malloc()ed一样。然后,for循环显然试图访问超出绑定的内存,从而创建未定义的行为。

如果要更改函数中的dataIn,则需要将指向它的指针传递给函数。

也就是说,

  • nRecords是指针,nRecords++;更新相应的int值。

  • void函数readFile()不应具有值类似return 1;return语句

相关内容

  • 没有找到相关文章