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

使用int指针参数时C中的分段错误,c,segmentation-fault,C,Segmentation Fault,我知道-另一个分割错误问题。。。 我试图运行我教授的函数enterValue,但一直收到分段错误。是我做错了什么,还是他的代码中有一个我没有发现的bug?注意声明int*length实际上是用他的原始代码写成int-length。考虑到最后一个参数valuePtr是指向int的指针,我认为参数length应该定义为 #include <stdlib.h> #include <stdio.h> #define MAX_LINE 256 char li

我知道-另一个分割错误问题。。。 我试图运行我教授的函数
enterValue
,但一直收到分段错误。是我做错了什么,还是他的代码中有一个我没有发现的bug?注意声明
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);
}

是的,您应该保留原始声明的
int-length
。使用在调用中传递指向它的指针

enterValue ("number of numbers", 1, 256, &length);
这使参数成为指向int的指针,并允许函数写入变量


我将length设置为指针,特别是不初始化它指向的位置。您创建了一个“写入随机内存”算法。

调用entervalue函数时,整数指针不指向任何对象。
你必须有
length=&some\u整数长度
指向某个整数。

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

int length;
其次,传递
length
的地址,因为您希望函数修改
length

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

天哪,我真是个白痴。很抱歉浪费大家的时间:-)@user1185790:没问题。犯错是我们学习的方式。想象一下,如果第一次一切都“正常”的话,你会学到多少!
enterValue ("number of numbers", 1, 256, &length);