首页 > 解决方案 > 为什么我不能将 1 个元素分配给 2> 大小的动态选项卡?

问题描述

我的代码的简化版本如下所示:

int * tab = nullptr;
int index = 0;
int size = 1;   // Program works unless this is init'd to something higher!
int a = 0;

while (true)
{
    int input;
    std::cin >> input;

    if (input == 0) break;
    index++;

    if (index >= size) {
        size = size * 2;
        int * newt = new int[size];

        for (int i = 0; i < a; ++i)
            newt[i] = tab[i];

        delete[] tab;
        tab = newt;
    }
    tab[a] = input;
    a++;
}

每当我尝试将“大小”整数更改为大于 1 时,程序就会崩溃。Visual Studio 大喊内存可访问性问题,但我仍然无法弄清楚到底出了什么问题。我不必更改它,但是我已经为这段代码苦苦挣扎了一个多小时,直到我不小心将变量更改为 1,然后它才起作用。我只是好奇为什么。

标签: c++pointersvisual-c++

解决方案


如果size大于 1,则index >= size在第一次迭代时不会为真,不会tab执行任何导致指向某物的代码,因此tab[a]访问被破坏。

你的算法很难遵循,所以我没有提出具体的解决方案,只是建议重新设计它。


推荐阅读