引发未处理的异常:简单的c ++程序中的读取访问冲突,它会动态增加数组长度来存储数字

问题描述 投票:0回答:1

我正在执行c ++赋值,允许用户一个个地输入数字,然后将其存储在数组中,并动态增加此数组的容量(乘以2)。基本上是使用一些基本代码来模仿“向量”。

#include<iostream>
using namespace std;

struct myArray {
    const size_t initial_size = 1;
    const size_t growth_factor = 2;
    size_t length = 0;
    size_t capacity = initial_size;
    int *v; // vector
};

int main() {
    int x; 
    myArray numbers;

    while (true) {
        cout << "Please input a numebr (program terminated once a -ve number is entered)" << endl;
        cin >> x;
        if (x < 0) 
            break;

        if (numbers.length == numbers.capacity) {
            int *temp = new int[numbers.capacity *= numbers.growth_factor];
            for (size_t i = 0; i < numbers.length; ++i)
                temp[i] = numbers.v[i];
            delete[] numbers.v;
            numbers.v = temp;
        }
        numbers.v[numbers.length++] = x;
    }

    for (size_t i = 0; i < numbers.length; ++i) 
        cout << numbers.v[i] << ",";

    cout << endl;

    return 0;
}

这是我得到的错误,我的第33行代码旁边几乎没有红叉:Numbers.v [numbers.length ++] = x;当我将鼠标悬停在红叉上时,就会出现以下错误:picture of error message

Exception thrown: read access violation.
numbers.v was 0x111011101110111. occurred

通过查看我的代码行,我只是将int值“ x”分配给数组“ numbers.v”的第一个元素

我已经尝试寻找其他解决方案,但是我发现其他每个人的问题都更加严重,并且此读访问冲突错误似乎是由于在不同情况下的不同原因。]

我正在执行c ++赋值,允许用户一个个地输入数字,然后将其存储在数组中,并动态增加此数组的容量(乘以2)。基本上是使用...

c++
1个回答
0
投票

[执行时:

© www.soinside.com 2019 - 2024. All rights reserved.