Ошибка выполнения "загрузка нулевого указателя типа char" при использовании char ** в C - PullRequest
0 голосов
/ 18 февраля 2020

У меня проблемы с использованием этого указателя на указатели на символы, представляющие массив строк.

Я должен разыменовать его с некоторым смещением i, чтобы получить i-ю строку, а затем разыменовать результат с некоторым другое смещение j, чтобы получить j-й символ такой строки.

В моем понимании и при условии, что индексы являются входящими, я мог бы сделать это несколькими способами syntacti c, например, чтобы получить 6-й символ второй строки:

char* myFun(char** strs, int size){
    char a;
    int i=2,j=6;
    a=strs[i][j];
    a=*(strs[i]+j);
    a=(*strs+i)[j];
    a=*(*(strs+i)+j);
}

Тем не менее, я получаю ошибку времени выполнения runtime error: load of null pointer of type 'char' в строке for l oop в следующем коде, возможно, ошибка не та, которую я подозреваю, но именно поэтому я прошу вас о помощи.

char * myFn(char ** strs, int strsSize){
    if(*strs=NULL || strsSize==0){
        printf("empty first string, or empty array of strings\n");
        return NULL;
    }
    int i,pf_s=1;
    char * pf_str=(char*)calloc(pf_s,sizeof(char));
    for(i=0;*(strs[0]+i)!='\0';++i){//       <-------- runtime error
        if(!(i<pf_s-2)){
            pf_s=pf_s*2;
            pf_str=(char*)realloc(pf_str,2*pf_s*sizeof(char));
        }
        *(pf_str+i)=(*strs)[i];
    }
    pf_str[i]='\0';
    pf_str=(char*)realloc(pf_str,i+1*sizeof(char));
    printf("%s\n",pf_str);
    return pf_str;
}

1 Ответ

0 голосов
/ 18 февраля 2020

Во второй строке кода NULL присваивается * strs вместо сравнения * strs с NULL.

Измените это:

if(*strs=NULL || strsSize==0){

На это:

if(*strs==NULL || strsSize==0){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...