调试断言从由用户输入的初始化类的阵列失败 [英] Debug assertion fail from initializing an array of a class by user input

查看:106
本文介绍了调试断言从由用户输入的初始化类的阵列失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个调试断言运行时,失败 Dinner.Init(篮,袋);

错误消息是向量下标越界。

我认为这是与可变大小的数组的初始化。它需要一个非常长的时间在步晚餐(INT NUM):苹果(NUM){}

是错误消息和延迟相关?是否有解决方案为?

在foo.h中

 的#include<矢量>
EXTERN INT NUM1
EXTERN INT NUM2
#定义篮= NUM​​1 + NUM2
#定义手袋= NUM​​1 * 2
结构AppleStruct
{
    的std ::矢量<&INT GT;块;
    AppleStruct(){}
    AppleStruct(INT NUM):大块(NUM){}
};
类晚餐
{
  的std ::矢量<&AppleStruct GT;苹果;
  上市:
  晚餐(){}
  晚餐(INT NUM):苹果(NUM){}
  无效初始化(INT NUM1,NUM2 INT);
}无效晚餐::初始化(INT NUM1,NUM2 INT)
{
INT I,J;    对于(i = 0; I< NUM1,我++)//填写残疾人的一切
    {
        为(J = 0; J< NUM2; J ++)
        {
            苹果[I] .Chunks [J] = 1;
        }
    }
}

在Foo.cpp中

 的#includefoo.h中
INT NUM1;
INT NUM2;
INT主(INT ARGC,CHAR *的argv [])
{
    sscanf_s(ARGV [1]%d个,&安培; NUM1);
    sscanf_s(的argv [2],%d个,&放大器; NUM2);
    AppleStruct(袋);
    晚餐(篮);
    Dinner.Init(篮,袋);
    返回0;
}


解决方案

在for循环中,你赋值给向量,但你没有为分配空间一个结构来保存块载体。

 为(i = 0; I< NUM1,我++)//填写残疾人的一切
{
    结构AppleStruct newstruct;
    为(J = 0; J< NUM2; J ++)
    {
        newstruct.Chunks.push_back(1);
    }
    Apple.push_back(newstruct);
}

I have a debug assertion that fails when running Dinner.Init(Baskets,Bags);

The error message is vector subscript out of range.

I think it has something to do with the initialization of the variable sized arrays. It takes an unusually long time at the step Dinner(int num): Apple(num){ }.

Are the error message and delay related? Is there a solution for both?

In foo.h

#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;
        }
    }
}

In foo.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;
}

解决方案

In the for loop ,you are assigning values to the vector chunk but you have not allocated space for a structure to hold the chunk vector.

 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);
}

这篇关于调试断言从由用户输入的初始化类的阵列失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆