[英]segmentation fault double pointer
我在以下代碼上存在分段錯誤,我真的看不到我錯過的內容,此代碼的目的是檢索.csv的行並將其放入使用雙指針創建的2D數組中。
段錯誤位於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);
}
while(token != NULL){
printf("%s\n", token);
token = strtok(NULL,s); // A
plaintexts[i][j]=(unsigned char) (*token); // B
j++;
}
如果此循環至少運行一次,它將以段錯誤結束。 為什么? 直到我在標記為A
的行中將token
設置為NULL,然后在標記為B
的行中取消引用,循環才能終止。 取消引用NULL將導致段錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.