数组和指针+错误

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 语句中。另外,在用户输入他们要输入的值后,我需要 size1 开始,但 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++。再次这样做你需要newnew int[size],做了几件事。为size 数量的ints 分配内存。返回指向分配内存开始的指针(确保对齐正确,初始化一些时间等)。此内存未释放。为此,您需要 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*数组”

以上是关于数组和指针+错误的主要内容,如果未能解决你的问题,请参考以下文章

Cray 指针和数组的分段错误:我做错了啥?

左值错误和数组指针

添加指向数组的指针时出现分段错误

在 C++ 中使用指针的数组:访问返回的数组时出现分段错误

C语言中函数指针*p **p 和数组不是很明白,可以解释下麽?

使用 typedef、多维数组和指针时出现编译器错误