c++ - 为什么我不能将 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,然后它才起作用。我只是好奇为什么。
解决方案
如果size
大于 1,则index >= size
在第一次迭代时不会为真,不会tab
执行任何导致指向某物的代码,因此tab[a]
访问被破坏。
你的算法很难遵循,所以我没有提出具体的解决方案,只是建议重新设计它。
推荐阅读
- continuous-integration - 如何从 PowerShell 设置 Azure 管道变量
- javascript - 如何将 MongoDB 集群正确连接到我的应用程序?
- python-3.x - 如何将字节类型的图像转换为numpy.ndarray?
- google-workspace - Google Tasks 中未更新截止日期 - Gmail UI
- bash - 从给定文件夹开始打印文件名及其出现次数的脚本
- java - 使用 appium 从任何 android 设备的通知栏中清除所有通知
- android - 如何共享带有标题的 pdf [不应显示 UNTITLED]
- java-8 - Jasperserver 6.3.0 (Tomcat 8.0.14) startup.bat:无法识别的选项:--JvmMs
- java - 从 Spring 3 升级到 Spring 5 - 现在自动装配错误
- java - 如何让 setTextSize 在 Android 8.0 上工作?