【问题标题】:Runtime error "load of null pointer of type char" while using char** in C在 C 中使用 char** 时出现运行时错误“加载 char 类型的空指针”
【发布时间】:2020-06-01 20:51:53
【问题描述】:

我在使用这个指向代表字符串数组的字符的指针时遇到问题。

我应该用一些偏移量 i 取消引用它以获得第 i 个字符串,然后用其他一些偏移量 j 取消引用结果以获得该字符串的第 j 个字符。

在我的理解中,假设索引是入站的,我可以通过几种语法方式做到这一点,例如,获取第二个字符串的第 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);
}

但是,我在以下代码的for 循环的行上收到了运行时错误runtime error: load of null pointer of type 'char',也许这个错误不是我怀疑的错误,但这就是我向您寻求帮助的原因.

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;
}

【问题讨论】:

  • 当你解决了你的问题并且这是一个错字你应该删除这个问题。
  • 这个问题就这么没用吗?除了是否是错字之外,我认为带有相同错误消息的人可能会在这里看到他们可能会取消引用空指针(可能不像我的代码那样明显)。

标签: c pointers runtime-error pointer-to-pointer


【解决方案1】:

在第二行代码中,将 NULL 分配给 *strs,而不是将 *strs 与 NULL 进行比较。

改变这个:

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

进入这个:

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

【讨论】:

  • 并在您使用时打开您的编译器警告。如今,大多数编译器都会对此发出警告,并在您真的是指赋值时强制您在它们周围放置括号。
  • 您还应该从问题中删除编辑,因为它确实是一个答案。
猜你喜欢
  • 1970-01-01
  • 2015-09-10
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 2015-04-23
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
相关资源
最近更新 更多