数组和指针+错误
Posted
技术标签:
【中文标题】数组和指针+错误【英文标题】:Arrays and Pointers +Errors 【发布时间】:2021-07-17 00:18:21 【问题描述】:这是作业:
您的目标是编写一个程序,以相反的顺序显示来自输入的一系列整数。您的 程序将提示用户输入此列表中的值的数量,它将用作动态的大小 在此提示后声明的数组。
数组size
未知,value
是指针,sub
必须在循环前赋值。
以下是步骤:
-
声明变量,但不要“为指针分配内存”。在提示用户输入值后执行此操作。
提示用户输入要列出的值的数量。 (如果用户输入否定数字,则必须向用户发送消息)。然后使用关键字
new
作为指针。
提示用户输入值
反向显示值。
对动态数组使用关键字delete
。
当我试图运行程序时,错误是:
错误:ISO C++ 禁止比较指针和整数 [-fpermissive]
for(int sub = 0; sub < size; size--)
--------------------------------------------------^ 错误:需要左值作为减量操作数for (int sub = 0; sub > size; size--)
-------------------------------------------------- ----^
另外,我不确定关键字new
的作用。
#include <iostream>
using namespace std;
int main()
int size, array;
cout << "How many values would you like to enter? ";
cin >> array;
int value;
int *array = new int[size];
if (size > 0)
for (int sub = 0; sub < size; size++)
cout << "Enter value #" << size << ": ";
cin >> value;
while (size > 0);
else
while (size < 0)
cout << "Size must be positive." << endl;
cout << "How many values would you like to enter? ";
cin >> size;
cout << "Here are the values you entered in reverse order: \n";
for (int sub = size - 1; sub >= 0; size--)
cout << "Value #" << size << " :" << value << endl;
delete[] array;
return 0;
PS:我知道size
应该是未知的,但我遇到了另一个错误提示
“size”的存储大小未知
所以,我添加数字以避免该错误。 编辑:所以感谢@MikeCAT,我更改了代码,但这个错误说terminate called after throwing an instance of 'std::bad_array_new_length what(): std::bad_array_new_length
。这是因为我为size
输入了一个负 数字,而这应该发生在if
语句中。另外,在用户输入他们要输入的值后,我需要 size
从 1 开始,但 size
始终从输入的数字开始。
【问题讨论】:
size[10]
超出了 9 元素 size
的范围。考虑使用std::vector
。
@MikeCAT 我不认为这是一个选项,因为需要动态分配的数组(size
不严格符合这是另一个问题,但这是题外话)
对于new
,您可以查看:en.cppreference.com/w/cpp/language/new。它有点重,但它应该很好地了解动态分配的数组/内存在c++
中的工作方式
storage size of 'size' is unknown
: 你不能在堆栈上(即在函数中本地)有变量,其大小在编译时是未知的。一些编译器允许它,但它不是标准的c++
。再次这样做你需要new
。 new int[size]
,做了几件事。为size
数量的int
s 分配内存。返回指向分配内存开始的指针(确保对齐正确,初始化一些时间等)。此内存未释放。为此,您需要 delete
所以感谢@MikeCAT更改代码,但是这个错误说terminate called after throwing an instance of 'std::bad_array_new_length what(): std::bad_array_new_length
。
【参考方案1】:
正如作业所说,你应该
-
读取一个值
使用读取的值作为其大小分配动态数组
读取数组的数字
#include <iostream>
int main(void)
// read a number (size of a dynamic array)
int numElements;
std::cin >> numElements;
// allocate a dynamic array
int *array = new int[numElements];
// read values for the dynamic array
for (int i = 0; i < numElements; i++)
std::cin >> array[i];
// print the values in reversed order
for (int i = numElements - 1; i >= 0; i--)
std::cout << array[i] << '\n';
// de-allocate the array
delete[] array;
// exit normally
return 0;
错误处理和不必要的消息被省略。尝试添加它们。
【讨论】:
尝试添加它们。 是个好建议。如果你从不检查错误,错误总是会让人感到意外。总是感到惊讶是低效的。 int *array = new int[numElements] 这行有一个错误,说“与int *array = new int[size]
987654322@冲突声明'int*数组”以上是关于数组和指针+错误的主要内容,如果未能解决你的问题,请参考以下文章