簡體   English   中英

在c中重新分配char **數組(Seg Fault核心已轉儲)

[英]Reallocating char** array in c (Seg fault core dumped)

我為每個條目重新分配一個char**數組,並且在編譯返回干凈時,僅存儲第一個條目,並且總是在我嘗試注冊第四個條目時遇到Segmentation Fault(核心轉儲)。

這是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]);
    }
  }
}

問題在這里:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM