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