为什么在 realloc space 之后将 char 分配给指向 char 指针的指针时会出现段错误?

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

所以我有一个双字符点猜测,我已经为其分配了 malloc space 并且在输入时我为额外字符重新分配以获得分配的正确内存量。我遇到的问题是,每当它命中 *guess[i] = input 时它就会出现段错误,我无法弄清楚为什么如果我从标准输入传递它 \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;
 }

下面是整个函数

int fund_check_input(char *val, char **guess)
{
 size_t lengthV = 0;
 size_t lengthG = 0;
 for(int i = 0; val[i] != '[=12=]'; 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] != '[=12=]'; i++)
 {
  if(val[i] != *guess[i])
  return 0;
 }
}
 return 1;
}

我认为我分配了足够的内存,因为当我增加重新分配的数量时它仍然会出现段错误,所以我不完全确定发生了什么。

这里

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

你只分配了 1 个字符的内存。

但是,您似乎需要为指向字符的指针留出空间。

你打算做什么:

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

另请注意

  1. C 中不需要类型转换。

  2. guess = malloc(1*sizeof *guess); 通常是一种更好的形式,因为您可以避免像上面那样的拼写错误。 (1*也可以删除)

也就是说,在修复上述错误后考虑 *guess 的值是什么。在调用 realloc

之前,您需要确保它已正确初始化