数组和指针+错误

     2023-02-21     296

关键词:

【中文标题】数组和指针+错误【英文标题】: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 指针和数组的分段错误:我做错了啥?

】Cray指针和数组的分段错误:我做错了啥?【英文标题】:Segmentationfaultwithcraypointersandarrays:WhatamIdoingwrong?Cray指针和数组的分段错误:我做错了什么?【发布时间】:2020-03-1315:32:44【问题描述】:我的代码很复杂,但以下MWEFortra... 查看详情

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

】使用typedef、多维数组和指针时出现编译器错误【英文标题】:Compilererrorwhenusingtypedefs,multidimensionalarrays,andpointers【发布时间】:2012-07-1301:41:10【问题描述】:我在编译以下代码时遇到问题。编译器声明:Assigningto\'RawChunk::Ptr\'(a... 查看详情

多项式程序中的 C++ 动态数组和指针导致退出错误 255

】多项式程序中的C++动态数组和指针导致退出错误255【英文标题】:C++DynamicArraysandPointersinPolynomialprogramcausesexiterror255【发布时间】:2015-11-0101:29:28【问题描述】:我目前正在做一个程序来读取度数、系数并创建一个多项式结构... 查看详情

指向对象和继承对象的指针数组

】指向对象和继承对象的指针数组【英文标题】:Arrayofpointerstoobjectsandinheritedobjects【发布时间】:2020-04-1517:06:20【问题描述】:我正在尝试制作一个程序来创建指向对象的指针数组,包括继承的对象。我得到的错误在第一个括... 查看详情

为啥函数没有得到动态数组? (我正在使用指针和引用)

】为啥函数没有得到动态数组?(我正在使用指针和引用)【英文标题】:Whythefunctiondonotgetthedynamicarray?(Iamusingpointersandreferences)为什么函数没有得到动态数组?(我正在使用指针和引用)【发布时间】:2018-02-1809:19:55【问题描述... 查看详情

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

】添加指向数组的指针时出现分段错误【英文标题】:Segmentationfaultwhenaddingapointertoanarray【发布时间】:2013-04-0618:43:38【问题描述】:我创建了两个班级,班级和学生。在Class构造函数中,我需要动态初始化一个指向Student对象的... 查看详情

二维数组和它的指针

这片文章介绍二维数组inta[i][j]中的符号:a,&a[i],&a[i][j],a[i][j],&a[i][j]的含义,重点在后面第二部分的分析,但是前面第一部分的复习数组指针,指针数组和二维指针是前提,前面的不会,后面的没法理解。这片文章写的... 查看详情

关于数组和指针的一道例题的解读

...赋值,怎么取值,语法错误。pa=&a;//正确,&a为指向数组的地址,和pa类型匹配printf("*pa=%p ",*pa);//正确,*pa含义为:对pa解引用,得到数组a的地址 查看详情

字符数组和字符指针的差别

字符数组是一个指针常量,而字符指针是一个指针变量。例如以下代码所看到的chara[80];a[80]="Hello"; //错误。仅仅能挨个元素进行赋值或者使用字符串函数strcpy(str1,str2)char*p;p="Hello"; //正确。由于是变量能够指定指向哪个字... 查看详情

使用/指针创建 3D 数组时出现分段错误(核心转储)

】使用/指针创建3D数组时出现分段错误(核心转储)【英文标题】:SegmentationFault(CoredDumped)WhenCreating3DArrayw/Pointers【发布时间】:2014-01-2502:44:29【问题描述】:提前感谢您的帮助!我目前正在阅读AlexAlllain的“JumpingintoC++”,到目... 查看详情

字符数组和字符串指针的定义

今天在看书上的一段代码的时候发现有一段代码有问题,对于那段代码的错误进行一下解释。并加强一下我们常用的两种定义字符串的方法的一些区别进行一下解释。书上的错误代码大概如下:#include<stdio.h>voidcopy(char*x,char*y... 查看详情

二维数组和指向指针的指针

一道面试题引发的问题,首先要知道[]的优先级高于*,题目:char**p,a[6][8];问p=a是否会导致程序在以后出现问题?为什么?直接用程序说明:#include<stdio.h>voidmain(){char**p,a[6][8];p=a;printf(" ");}编译,然后就会发现通不过,报错... 查看详情

结构中指向数组的 cudaFree 指针上的 CUDA 分段错误

】结构中指向数组的cudaFree指针上的CUDA分段错误【英文标题】:CUDASegmentationfaultoncudaFreepointertoarrayinstruct【发布时间】:2021-05-2220:44:05【问题描述】:我在CUDA设备上得到了一个结构,它包含一个指向数组的指针。计算、访问元素... 查看详情

数组指针和指针数组和二重指针

数组指针和指针数组从字面上来看很纠结,有时候我也搞不清,分不清哪样的是数组指针,哪样的是指针数组。这东西就不是靠记忆的,我们采取分析加对比分层剥离的方法分析。1.概念区别 1.1.数组指针:定语在前,主语在... 查看详情

指针数组的分段错误

】指针数组的分段错误【英文标题】:segmentationfaultwithpointerarray【发布时间】:2018-06-0623:10:33【问题描述】:尝试为我的指针数组输入数据时出现段错误。我对编码很陌生,所以任何帮助都会很棒。我的任务是创建一个指针数组... 查看详情

为啥关系运算符不能在指针和数组中工作[关闭]

】为啥关系运算符不能在指针和数组中工作[关闭]【英文标题】:Whyrelationaloperatornotworkinginpointersandarrays[closed]为什么关系运算符不能在指针和数组中工作[关闭]【发布时间】:2021-06-2512:10:18【问题描述】:为什么while(p!=p+sz)是下... 查看详情

数组字符串和指针字符串

在C语言中,表示一个字符串我们可以用数组如charstr[]="abc",也可以用指针char*str="abc",那二者有何区别呢? 1、数组字符串存放在全局数据区或栈区,可读可写;指针字符串存放在常量区,可读不可写。数组字符串:charstr[]="... 查看详情

c++核心-字符串向量和数组及指针详解

...容后面再详细介绍,string和vector都是标准模板库的内容。数组是C的复合类型(可能只有我这么叫),一组数据,空间连续,所以由开始也有结束,从0开始,到n-1结束。注意别越界,因为是从0开始的。string和vector内部的保存数据... 查看详情