簡體   English   中英

為什么在重新分配空間后將 char 分配給指向指針 char 的指針時會出現段錯誤?

[英]Why am I getting a segfault when assign a char to a pointer to pointer char after realloc space for it?

所以我有一個雙字符點猜測,我已經為它分配了 malloc 空間,並且當我為獲得正確數量的 memory 分配時,我已經重新分配了額外的字符。 我遇到的問題是,每當它點擊*guess[i] = input時它就會出現段錯誤,我無法弄清楚為什么如果我從 stdin 傳遞它 \n 它可以工作並通過 for 循環,但只要有多個字符來自標准輸入它的段錯誤

這是 for 循環和之前的 malloc

char input;
 guess = (char**) malloc(1*sizeof(char));
  for(int i = 0; input != '\n'; i++)
 {
  input = getc(stdin);
  lengthG += 1;
  *guess =(char *) realloc(*guess, lengthG * sizeof(char));
  *guess[i] = input;
 }

這是整個 function

int fund_check_input(char *val, char **guess)
{
 size_t lengthV = 0;
 size_t lengthG = 0;
 for(int i = 0; val[i] != '\0'; i++)
 { 

  if(lengthV < 4)
  {  
   if(val[i] < 48 || val[i] > 57)
    return -1;
   else 
    lengthV += 1; 
  }
  else 
   return -1;
 }
 char input;
 guess = (char**) malloc(1*sizeof(char));
  for(int i = 0; input != '\n'; i++)
 {
  input = getc(stdin);
  lengthG += 1;
  *guess =(char *) realloc(*guess, lengthG * sizeof(char));
  *guess[i] = input;
 }
 printf("%s\n", "hey");
 
 
if(lengthG != lengthV)
  return 0;
else
{
 for(int i = 0; *guess[i] != '\0'; i++)
 {
  if(val[i] != *guess[i])
  return 0;
 }
}
 return 1;
}

我認為我分配了足夠的 memory 因為當我增加重新分配的數量時它仍然會出現段錯誤,所以我不完全確定發生了什么。

這里

guess = (char**) malloc(1*sizeof(char));
                                 ^^^^^

您只為 1 個字符分配 memory。

但是,您似乎想要一個指向字符的空間。

您是否打算這樣做:

guess = (char**) malloc(1*sizeof(char*));
                                     ^

另請注意

  1. C 中不需要類型轉換。

  2. 那個guess = malloc(1*sizeof *guess); 通常是一種更好的形式,因為您避免了上面所做的拼寫錯誤。 1*也可以刪除)

也就是說,在修復上述錯誤后,考慮*guess的值是多少。 在調用realloc之前,您需要確保它已正確初始化

暫無
暫無

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

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