分段错误双指针

时间:2015-12-29 09:52:17

标签: c segmentation-fault double-pointer

我在下面的代码中遇到了分段错误,我真的看不到我错过了什么,这段代码的目的是检索.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);

}

1 个答案:

答案 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将导致段错误。