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