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

时间:2015-01-17 18:48:58

标签: c segmentation-fault

我知道 - 另一个分段错误问题...... 我正在尝试运行我的教授的函数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

3 个答案:

答案 0 :(得分:4)

是的,你应该离开int length的原始声明。使用

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

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

我的长度是一个指针 - 特别是没有初始化它指向的位置 - 你已经创建了一个&#34;写入随机存储器&#34;算法

答案 1 :(得分:3)

调用entervalue函数时,整数指针不指向任何内容。 你必须有length = &some_integer;,以便整数指针length指向某个整数。

答案 2 :(得分:1)

我看到两个错误,首先length不应该是指针

int length;

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

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