使用 int 指针参数时 C 中的分段错误

Segmentation fault in C while using int pointer argument

我知道 - 另一个分段错误问题... 我正在尝试 运行 我教授的函数 enterValue,但一直收到分段错误。是我做错了什么,还是我没有在他的代码中发现错误?请注意,声明 int* length; 实际上在他的原始代码中写为 int length;。鉴于最后一个参数 valuePtr 旨在成为一个指向 int 的指针,这就是我认为参数 length 应该定义为的内容。

#include <stdlib.h>
#include <stdio.h>

#define MAX_LINE        256

char    line[MAX_LINE];

int*     length;

void    enterValue      (const char*    descriptionPtr,
                     int            min,
                     int            max,
                     int*           valuePtr
                    )
{
  do
  {
    printf("Please enter the %s (%d-%d): ",descriptionPtr,min,max);
    fgets(line,MAX_LINE,stdin);
    *valuePtr = strtol(line,NULL,10);
  }
  while  ( (*valuePtr < min) || (*valuePtr > max) );

}

int main ()
{
  enterValue ("number of numbers", 1, 256, length); 
  return(EXIT_SUCCESS);
}

当我 运行 这个时,我得到以下信息:

Please enter the number of numbers (1-256): 4
Segmentation fault

是的,你应该留下 int length 的原始声明。在使用

的调用中传递指向它的指针
enterValue ("number of numbers", 1, 256, &length);

这使得参数成为一个指向 int 的指针,并允许函数写入变量。

我将 length 设为一个指针——尤其是没有初始化它指向的地方——你已经创建了一个 "write to random memory" 算法。

当您调用 entervalue 函数时,整数指针没有指向任何东西。 你必须有 length = &some_integer; 以便整数指针 length 指向某个整数。

我看到两个错误,第一个length不应该不是指针

int length;

其次,传length的地址,因为你要函数修改length

enterValue ("number of numbers", 1, 256, &length);