我是编码新手,当我运行 C++ 程序时收到此错误消息:
zsh:分段错误./a.out
代码如下:
#include <iostream>
using namespace std;
int main(){
int i;
int numElements;
std::cout << "Enter the number of elements for the array: ";
std::cin >> numElements;
int myArray[numElements];
std::cout << "Enter " << numElements << " numbers." << std::endl;
for (i = 0; i < numElements; ++i) {
std::cout << "Value: ";
std::cin >> myArray[i];
}
for (i = numElements; numElements >= 0; --i) {
std::cout << myArray[i] << " ";
}
return 0;
}
这是带有错误消息的终端: 在此输入图片描述 在此输入图片描述
我尝试在第一个 for 循环之后添加一条语句来打印数组,但它没有显示在终端中。所以问题似乎发生在第一个 for 循环之时或之前。
您的代码中存在错误。
特别是您的数组打印循环不正确:
for (i = numElements; numElements >= 0; --i) {
std::cout << myArray[i] << " ";
}
上面的代码有2个bug:
numElements >= 0
毫无意义。这个条件永远不会改变,因此循环将无限地持续递减i
。当 i
获得负值时,您的代码会执行非法操作并具有所谓的 未定义行为。此时它可能会采取任何行动,包括发动第三次世界大战。但通常它会导致分段错误(这就是它的作用)。i
== numElements
,而有效索引为:0, 1, ... nuElements-1
。 numElements
超出了该数组长度。这也是一种未定义的行为。PS。该代码不是有效的 C++。它是 Gnu C++ 扩展,不可移植。对于这种情况,最好使用
std::vector<int>
。