【问题标题】:Segmentation fault in C while using int pointer argument使用 int 指针参数时 C 中的分段错误
【发布时间】:2015-01-17 18:48:57
【问题描述】:

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

【问题讨论】:

    标签: c segmentation-fault


    【解决方案1】:

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

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

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

    我将长度设置为指针——尤其是不初始化它指向的位置——你创建了一个“写入随机内存”算法。

    【讨论】:

    • 天哪,我真是个白痴。很抱歉浪费大家的时间:-)
    • @user1185790:没有汗水。犯错是我们学习的方式。想象一下,如果第一次“一切正常”,您将学到的东西有多么少!
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      int length;
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-21
        • 1970-01-01
        • 1970-01-01
        • 2012-04-10
        • 1970-01-01
        • 2013-09-18
        • 2016-02-24
        相关资源
        最近更新 更多