我在下面的代码中遇到了分段错误,我真的看不到我错过了什么,这段代码的目的是检索.csv的行并将它们放在用双指针创建的2D数组中
seg错误位于csv文件第一行的明文[i] [j]的最后一个分配。
非常感谢你的帮助(从昨天开始这个问题......)
int main(){
int n=48; //nbers of columns in csv file
int m=60; //nbers of lines in csv file
int cpt,i,j;
cpt=0;
i=0;
FILE *fp;
char *token;
const char s[2] = ",";
unsigned char **plaintexts;
plaintexts = malloc(sizeof(*plaintexts) * m);
char *str=malloc(sizeof(char)*15*n); //maximum 15 char per box
fp = fopen("aes_traces.csv","r");
while(fgets(str,15*n,fp)!=NULL){
plaintexts[i] = malloc(sizeof(*plaintexts[i]) * n);
token = strtok(str,s);
j=0;
while(token != NULL){
printf("%s\n", token);
token = strtok(NULL,s);
plaintexts[i][j]=(unsigned char) (*token);
j++;
}
i++;
free(str);
free(token);
}
fclose(fp);
}
答案 0 :(得分:3)
while(token != NULL){
printf("%s\n", token);
token = strtok(NULL,s); // A
plaintexts[i][j]=(unsigned char) (*token); // B
j++;
}
如果此循环至少运行一次,它将以段错误结束。为什么?循环无法终止,直到我标记为token
的行中A
设置为NULL,然后在标记为B
的行中取消引用。取消引用NULL将导致段错误。