繁体   English   中英

C++ 访问冲突读取位置 0xFFFFFFFFFFFFFFFF 在动态向量数组中

[英]C++ Access violation reading location 0xFFFFFFFFFFFFFFFF in dynamic array of vectors

这段代码是这样说的:(代码试图填充外观数组直到 100)我在 arrayOne[0].numberOfThings 中修复了向量数组的大小,因为我知道它是它可以包含的最大项目数,你可以将其视为已知整数。

int max = 100;
int maxNThings = arrayOne[0].numberOfThings; //Integer that I know and I pickit as the max for dynamic array
    vector<Thing>* appearanceArrayOfNumThings;
    appearanceArrayOfNumThings= new vector<Thing>[maxNThings];
    for (int i = 0; i<max;i++){
        int currentNumberOfThings = arrayOne[i].numberOfThings;
        appearanceArrayOfNumThings[currentNumberOfThings ].push_back(arrayOne[i]);
    }

我有

访问冲突读取位置 0xFFFFFFFFFFFFFFFF

在for语句中,行appearanceArrayOfNumThings[currentNumberOfThings ].push_back(arrayOne[i]);

我在想是否是因为我不知道的矢量行为。

你能给我任何线索或者你看到我做错了什么吗?

首先,您应该使用调试器,您会立即发现错误。

其次, new vector<Thing>[maxNThings]是个主意。 不要那样做 至少使用std::vector<std::vector<Thing>> 在我看来,包含向量的结构向量更清晰。

使用向量向量,您可以使用.at()来告诉您的错误。


此代码将始终调用未定义的行为。

int maxNThings = arrayOne[0].numberOfThings;

让我们暂时假设这个数字是12

appearanceArrayOfNumThings = new vector<Thing>[maxNThings]; // 12

这将创建一个包含 12 个向量的数组。 可从011索引。

for (int i = 0; i < max ;i++){
    // ...
}

对于第一次迭代, i等于0 让我们继续。

// i == 0
int currentNumberOfThings = arrayOne[i].numberOfThings;

此时, arrayOne[i]arrayOne[0]值相同,因为i等于0 所以currentNumberOfThings等于12 ,也就是maxNThings

appearanceArrayOfNumThings[currentNumberOfThings ]

此访问appearanceArrayOfNumThings[12]超出范围,因为appearanceArrayOfNumThings可从011索引。 你进入UB土地。 这是你的错误。

对于maxNThings任何值,它总是会失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM