gpt4 book ai didi

c++ - 为什么这段代码不打印我的数组?

转载 作者:行者123 更新时间:2023-11-30 02:08:18 25 4
gpt4 key购买 nike

我这里有一个整数数组排序程序,但我有一个问题:每当我运行该程序时,我有时会收到“变量‘numbers’周围的堆栈已损坏”消息,有时它只是重复打印出数字 8。这是我的代码(在 Visual C++ 2010 中编译):

#include <iostream>
#include <cstdlib>
using std::cout;
using std::endl;

void swap(int *x, int *y)
{
int tmp=0;
tmp = *x;
*x = *y;
*y = tmp;
tmp = 0;
}

int main()
{
int numbers[13] = {8,16,23,487,2,301,48,0,13,10,644,12};

int size = sizeof(numbers) / sizeof(int);

//sort

int i = 0;
int* a = &numbers[0];
int* b = &numbers[1];


while(i < size){

if(*a > *b){
swap(a, b);
}

*a++;
*b++;
i++;
}

//Print our results
int loopIterator = 0;
int numToPrint = 0;
while(loopIterator < size){
cout << numbers[numToPrint] << endl;
loopIterator++;
}


system("PAUSE");

}

最佳答案

首先,你永远不会增加 numToPrint ,因此您永远不会打印超过 numbers[0] 的值.至少将您的代码更改为:

while(loopIterator < size){
cout << numbers[numToPrint++] << endl;
loopIterator++;
}

其次,由于您的 while循环使用测试 i < size ,在循环的最后一次迭代中,您将访问 numbers 之外的内存为你的b指针,并可能将该值交换到 numbers 的最后一个槽中(即 a 指向的位置)。您想将测试更改为 i < (size - 1)以避免这种情况。例如,如果在 i == 0你有a = &numbers[0]b = &numbers[1] , 然后到 i == 12 的时候,你最终会得到 a = &numbers[12]b = &numbers[13] ... b 的值在这个例子中指向的是数组的末尾。取决于您的编译器如何设置堆栈,以及您分配 numbers 的方式在堆栈上,如果你最终得到 b,这实际上会对你的程序造成一些破坏。指向您的 main() 的激活记录数据结构功能,并反过来破坏它。

关于c++ - 为什么这段代码不打印我的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7068785/

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