在c中重新分配char **数组(Seg Fault核心已转储)

时间:2018-11-02 19:38:11

标签: c arrays segmentation-fault realloc coredump

我要为每个条目重新分配一个char**数组,并且在编译恢复干净时,只有第一个条目被存储,并且当我尝试注册第四个条目时,我总是遇到分段错误(核心转储)。 >

这是main.c中的相关代码:

int main(int argc, char *argv[]) 
{
    int i,sizea,sizeb,choice,letters,check,mistakes,count;
    char C[26][2];
    char **A,**B,a;

    A=(char**)malloc(sizeof(char*));
    *A=(char*)malloc((MAX_CHAR+1)*sizeof(char));

    sizea=1;
    build(&A,&sizea);

    return 0;
}

这是mylib.c中方法的实现:

void build(char ***A, int *sizea)
{
    *A=(char**)realloc(*A,(*sizea) * sizeof(char*));
    *A[*sizea-1]=(char*)malloc((MAX_CHAR+1)*sizeof(char));

    printf("Give word :");
    scanf("%s",(*A[*sizea-1]));

    (*sizea)++;
}

非常感谢您的帮助。

编辑:此方法中的类似问题无法通过做相同的事情解决

void find(char **A, char ***B, int letters,int sizea, int *sizeb){

int i,j,k,dummy;
char a='a';

  for(i=0;i<(sizea-1);i++){
    printf("here\n");
      if(A[i][letters]=='\0'){
      *B=(char**)realloc(*B,(*sizeb+1) * sizeof(char*));
      (*B)[*sizeb]=(char*)malloc((letters+1)*sizeof(char));
      (*B)[*sizeb-1]=A[i];
      *sizeb++;
      printf("%s\n", (*B)[i]);
    }
  }
}

1 个答案:

答案 0 :(得分:3)

问题在这里:

scanf("%s",(*A[*sizea-1]));

数组索引运算符[]的优先级高于取消引用运算符*的优先级。所以上面的解析为:

scanf("%s",(*(A[*sizea-1])));

您想要的是:

scanf("%s",((*A)[*sizea-1]));

与此类似:

*A[*sizea-1]=(char*)malloc((MAX_CHAR+1)*sizeof(char));

应该是:

(*A)[*sizea-1]=(char*)malloc((MAX_CHAR+1)*sizeof(char));