gpt4 book ai didi

c - 生成二维 vla 以段错误结束

转载 作者:行者123 更新时间:2023-11-30 16:04:33 28 4
gpt4 key购买 nike

进一步开发昨天的代码( seg fault caused by malloc and sscanf in a function ),我尝试在网上找到的一些教程的帮助下生成一个 2-dim vla。但我在 (*data)[i][j]=atof(p); 处遇到段错误。该程序应该从文本文件中读取矩阵并将其加载到二维数组(第 1-9 列)和一维数组(第 10 列)中

[示例代码]

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>

const int LENGTH = 1024;

void read_data(float ***data, int **classes, int *nrow,int *ncol, char *filename){
FILE *pfile = NULL;
char line[LENGTH];
if(!( pfile=fopen(filename,"r"))){
printf("Error opening %s.", filename);
exit(1);
}
int numlines=0;
int numcols=0;
char *p;

fgets(line,LENGTH,pfile);
p = strtok (line," ");
while (p != NULL){
p = strtok (NULL, ", ");
numcols++;
}
while(fgets(line,LENGTH,pfile)){
numlines++;
}
rewind(pfile);
int numfeats=numcols-1;
*data=(float**) malloc(numlines*sizeof(float*));
*classes=(int *)malloc(numlines*sizeof(int));
if(*classes == NULL){
printf("\nOut of memory.");
exit(1);
}

int i=0;
while(fgets(line,LENGTH,pfile)){
p = strtok (line," ");
for(int j=0;j<numfeats;j++)
{
(data)[i]=malloc(numfeats*sizeof(float));
printf("%i ",i);
(*data)[i][j]=atof(p);
p = strtok (NULL, ", ");
}
(*classes)[i]=atoi(p);
i++;
}
fclose(pfile);
*nrow=numlines;
*ncol=numfeats;
}

int main() {
char *filename="somedatafile.txt";
float **data2;
int *classes2;
int r,c;

read_data(&data2,&classes2, &r, &c,filename) ;
for(int i=0;i<r;i++){
printf("\n");
for(int j=0;j<c;j++){
printf("%f",data2[i][j]);
}
}
return 1;
}

[somedatafile.txt 的内容]

50 21 77 0 28 0 27 48 22 2
55 0 92 0 0 26 36 92 56 4
53 0 82 0 52 -5 29 30 2 1
37 0 76 0 28 18 40 48 8 1
37 0 79 0 34 -26 43 46 2 1
85 0 88 -4 6 1 3 83 80 5
56 0 81 0 -4 11 25 86 62 4
55 -1 95 -3 54 -4 40 41 2 1
53 8 77 0 28 0 23 48 24 4
37 0 101 -7 28 0 64 73 8 1
...

最佳答案

你的意思是(*data)[i]=malloc(numfeats*sizeof(float));

而不是
(data)[i]=malloc(numfeats*sizeof(float))

关于c - 生成二维 vla 以段错误结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2919647/

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