gpt4 book ai didi

c - 我的 csv_loader() 函数中出现段错误

转载 作者:行者123 更新时间:2023-11-30 15:46:09 26 4
gpt4 key购买 nike

我试图用 C 语言编写一个 csv 解析器,但每次我都会在这个函数中遇到段错误。我不知道如何解决它。

char*** csv_loader(char *filename){
FILE* file_xx;
file_xx = fopen(filename, "r");
if(file_xx==NULL){
printf("Failed to open File, no such file or directory!\n");
return 0;
}
int c_=0;
int **linenumbers;
int l=lines(filename);
linenumbers=malloc(sizeof(int)*l);
char*** loaded_csv;
int counter_line=0;
int counter_row=0;
loaded_csv=malloc(sizeof(char **) *l);
loaded_csv[0][0]=malloc(getfirstcolumn(filename)*sizeof(char)+2);
if(NULL==loaded_csv){
printf("Failed to initialize 'char** loaded_csv'!\n");
return 0;
}
int c_c=0;
int *cm=get_column_map(filename);
for(c_c=0;c_c<l;c_c++){
loaded_csv[c_c]=malloc(sizeof(char *)*cm[c_c]);
}
while(c_!=EOF){
c_=getc(file_xx);
if(c_=='\n'){
linenumbers[counter_line][cm[counter_line]]=counter_row+2;
loaded_csv[counter_line][cm[counter_line]]=malloc(counter_row*sizeof(char));
if(NULL == loaded_csv[counter_line][cm[counter_line]]){
return 0;
}
loaded_csv[counter_line][counter_row]='\0';
counter_row=0;
counter_line++;
}else{
if(c_==','){
counter_row=0;
}else{
counter_row++;
}
}
}
fclose(file_xx);
FILE*fgetsread;
fgetsread=fopen(filename, "r");
int ident, ident_c;
for(ident=0;ident<l;ident++){
for(ident_c=0;ident_c<cm[ident];ident_c++){
fgets(loaded_csv[ident][ident_c], linenumbers[ident][ident_c], fgetsread);
loaded_csv[ident][ident_c][linenumbers[ident][ident_c]-2]='\0';
}
}
fclose(fgetsread);
free(linenumbers);
return loaded_csv;
}

调试器说是这一行:

    loaded_csv[0][0]=malloc(getfirstcolumn(filename)*sizeof(char)+2);

有人知道这个bug是什么吗?我对 C 还很陌生,无论如何尝试理解 malloc 的事情......

PS:其他功能在这里:http://pastebin.com/VQZ4d5UU

最佳答案

所以,您之前已经在该行上分配了空间:

loaded_csv=malloc(sizeof(char **) *l);

这很好,但 loaded_csv[0] 尚未初始化到您拥有的位置。因此,当您执行以下行时

loaded_csv[0][0]=malloc(getfirstcolumn(filename)*sizeof(char)+2);

您正在尝试设置位于某个随机位置的变量(无论 loaded_csv[0] 恰好在哪里)。

如果您想触摸loaded_csv[0][0],则必须确保loaded_csv[0]首先指向有效内存(可能是在为 loaded_csv[0][0] 分配某些内容之前,通过 malloc 为其分配内存。)

关于c - 我的 csv_loader() 函数中出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18538049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com