调试断言因通过用户输入初始化类的数组而失败
Debug assertion fail from initializing an array of a class by user input
我有一个调试断言,运行Dinner.Init(Baskets,Bags);
时失败
错误消息是矢量下标超出范围。
我认为这与可变大小数组的初始化有关。在步骤Dinner(int num): Apple(num){ }
上需要异常长的时间。
错误消息和延迟是否相关?两者都有解决方案吗?
在福·
#include <vector>
extern int num1
extern int num2
#define Baskets = num1+num2
#define Bags = num1*2
struct AppleStruct
{
std::vector<int> Chunks;
AppleStruct(){}
AppleStruct(int num):Chunks(num){ }
};
Class Dinner
{
std::vector<AppleStruct> Apple;
public:
Dinner(){}
Dinner(int num): Apple(num){ }
void Init(int num1, int num2);
}
void Dinner::Init(int num1, int num2)
{
int i, j;
for (i=0; i<num1; i++) // Fill everything INVALIDs
{
for (j=0; j<num2; j++)
{
Apple[i].Chunks[j]=1;
}
}
}
在福.cpp
#include "foo.h"
int num1;
int num2;
int main(int argc, char *argv[])
{
sscanf_s(argv[1],"%d",&num1);
sscanf_s(argv[2],"%d",&num2);
AppleStruct(Bags);
Dinner(Baskets);
Dinner.Init(Baskets,Bags);
return 0;
}
在 for 循环中,您正在为向量chunk
赋值,但您尚未为结构分配空间来容纳块向量。
for (i=0; i<num1; i++) // Fill everything INVALIDs
{
struct AppleStruct newstruct;
for (j=0; j<num2; j++)
{
newstruct.Chunks.push_back(1);
}
Apple.push_back(newstruct);
}
Vector 不是一个常规数组,你应该先push_back添加元素。 改变:
Apple[i].Chunks[j] = 1;
自
Apple[i].Chunks[j].push_back(1);
此外,您还需要向Apple
添加元素。
相关文章:
- 从父数组测试用例构造二叉树失败
- 结构化绑定初始值设定项表单 { 赋值表达式 } 对于 clang 上的数组类型失败
- 用于查找连续子数组的最大总和的代码使测试用例失败
- 分段失败反向数组
- Lambda 捕获数组元素失败
- UINT8数组对INT64的质量化失败,但应该起作用
- 简单的2D数组标头文件,打印失败
- constexpr + 多维数组失败
- 从 3D 数组转换为 1D 数组失败
- 十六进制数组 cout 到文本文件失败
- 动态分配缓冲空间为二维数组 - 为什么失败
- 删除数组时断言失败
- c++ sort() 函数对于<algorithm>整数数组的大小(元素数)>10^7 个元素的大输入是否失败?
- 返回指向指针数组的指针获取下一个元素失败
- 对象的c++数组,初始化失败
- C++类模板构造函数 -- 重载引用 (U&) 与数组 (U*) 失败
- 检索静态char*数组失败
- Qt Qvariantlist转换为javascript数组失败
- 动态分配对象数组失败
- BOOST/CSTDINT类型BOOST稀疏向量数组失败,为什么