gpt4 book ai didi

c++ - 为什么这个指针/整数比较会产生段错误?

转载 作者:太空狗 更新时间:2023-10-29 20:06:44 25 4
gpt4 key购买 nike

我正在开发一个生成段错误的程序,但我不明白为什么。如果我从“最低”和“最大”变量中删除指针声明并将它们用作无指针整数,则程序可以正常工作。

但是,一旦我尝试使用指针,问题就出现了,我收到了段错误。我意识到这可能是一个非常容易解决的问题,但我试图通过查看其他类似问题来理解代码。我还没有找到解决我的问题的方法。我也不明白出了什么问题。

这是产生问题的代码(下面是完整源代码的链接):

     cout << "This is the array containing the random numbers:\n";
for(int *i=numbers; i != numbers + arrLength; i++) {
if((*i % 200) == 0 && *i > 200) {
cin.get();
cout << endl;
}
else
cout << *i << ' ';

// Get statistics
// In the continuation of getting, lowest, largest then adding to sum.
// THIS PART IS MAKING SEGMENTATION FAULT.
if(*i < *lowest)
lowest = i;
if(*i > *largest)
largest = i;
sum += *i;
}

i 变量指向用户输入后声明的旧引用:

cout << "You entered: " << arrLength << "\n\n";

int *numbers = new int[arrLength];

// Fill the array with random numbers
srand(time(NULL));
int x;
int range = 5001;
for(int index=0; index<arrLength; index++){
*(numbers + index) = rand() % range;
x = rand() % 2;
if(x > 0) {
*(numbers + index) = *(numbers + index) * -1;
}
}

请解释为什么我的程序不工作以及我做错了什么。正如我之前所说,一切正常,除了:

if(*i < *lowest)
lowest = i;
if(*i > *largest)
largest = i;

完整来源: http://pastie.org/2105963

在此先感谢您!

最佳答案

int *largest = 0, *lowest = 0, sum = 0;

这是你的问题。您永远不会为这些分配内存或分配有效地址。当你取消引用 NULL 指针时,就像这里一样

if(*i < *lowest) //lowest is NULL

你得到未定义的行为,其中包括段错误、鼻腔恶魔和其他任何东西

关于c++ - 为什么这个指针/整数比较会产生段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6439547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com