gpt4 book ai didi

c++ - "vector subscript out of range"

转载 作者:行者123 更新时间:2023-11-28 08:18:12 26 4
gpt4 key购买 nike

我有一个奇怪的问题,有 2 个“指向对象指针的指针”数组(通过查看代码,我做对了吗?)我确实阅读了很多书,试图掌握尽可能多的关于我正在尝试做的事情的知识,但这个错误越来越多,我真的很想知道为什么会这样。

从这一行弹出的错误中我可以看出:

vec_cliente[i] = new Cliente(nombre,apellido,carne,fecha); //this pops the error

是我正在尝试将一个新的 Cliente 放在 vec_cliente[i] (0) 上,但它不存在。

然而……这

vec_solicitudes[i] = new Casa_Profesor(carne, fecha_sol, costo_mant, costo_alquiler, cant_p,salon); 

运行良好 o.0

Principal.h 有这个:

#pragma once
#include string>
#include vector>
#include "Cliente.h"
#include "Persona.h"
#include "Casa_Profesor.h"
using namespace std;

class Principal{


private:
Cliente ** vec_cliente;
Casa_Profesor ** vec_solicitudes;


public:
static string info [];
static string miembros [];

Principal(void);
void cargar(void);
void calular_mayor_solicitudes(Cliente* vec_cliente, Casa_Profesor* vec_solicitudes);
void mayor_costo(void);
void ingreso_total(void);
void espacio_mayor_uso(void);
virtual ~Principal(void);

};

Principal.cpp 有这个:

#include "StdAfx.h"
#include "Principal.h"
#include iostream>
#include string>
#include sstream>
#include vector>
#include iterator>


using namespace std;

string Principal::info[] = {"623 25-05-2010 625.00 850.50 190 1"

,"199 24-01-2009 300 900.5 180 1"
,"199 24-01-2010 300.50 900 175 2"
,"201 24-01-2009 300 900.5 180 3"
,"201 24-01-2010 300.50 900 175 3"
,"201 24-01-2009 30 900.5 180 3"
,"201 24-01-2010 300.50 900 175 3"
,"404 24-01-2009 300 900.5 180 3"
,"404 24-01-2010 300.50 900 175 2"
,"404 24-01-2009 30 900.5 180 3"
,"404 24-01-2010 300.50 900 175 2"
,"404 24-01-2009 300 90.5 180 3"
,"505 24-01-2010 300.50 900 175 2"
,"505 24-01-2009 300 900.5 180 3"
,"505 24-01-2010 300.50 900 175 2"
,"505 24-01-2009 300 90.5 180 1"
,"505 24-01-2010 300.50 900 175 1"
,"505 24-01-2009 300 900.5 180 3"
,"505 24-01-2010 1300.50 900 175 2"
,"106 24-01-2009 300 900.5 180 3"
,"106 24-01-2010 300.50 900 175 3"
,"106 24-01-2009 300 900.5 180 3"
,"106 24-01-2010 300.50 900 175 3"};


string Principal::miembros[] = {"Jaime Perez 623 22 12 1998"

,"Maria Perez 199 02 12 1988"
,"Jose Castro 201 3 11 2008"
,"Juan Caceres 404 21 1 2007"
,"Carla Vivas 505 18 09 1990"
,"Daniela Ochoa 106 02 01 2010"};

Principal::Principal(void)
{


}


void Principal::cargar(){

int i = 0, carne = 0, cant_p = 0, salon = 0;
string nombre, apellido, fecha, aux, fecha_sol;
double costo_mant, costo_alquiler;

vec_solicitudes = new Casa_Profesor * [(sizeof(info)/sizeof(string))*sizeof(Casa_Profesor)];

for (i = 0; i < (sizeof(info)/sizeof(string)); i++){
istringstream stream(info[i],ios_base::in);

stream >> aux;
carne = atoi(aux.c_str());
stream >> fecha_sol;
stream >> aux;
costo_mant = atof(aux.c_str());
stream >> aux;
costo_alquiler = atof(aux.c_str());
stream >> aux;
cant_p = atoi(aux.c_str());
stream >> aux;
salon = atoi(aux.c_str());


vec_solicitudes[i] = new Casa_Profesor(carne, fecha_sol, costo_mant, costo_alquiler, cant_p,salon); //THIS runs fine
}

vec_cliente = new Cliente * [(sizeof(miembros)/sizeof(string))*sizeof(Cliente)];

for (i = 0; i < (sizeof(miembros)/sizeof(string)); i++){
istringstream stream(miembros[i],ios_base::in);

stream >> nombre;
stream >> apellido;
stream >> aux;
carne = atoi(aux.c_str());
stream >> fecha;
fecha.append(" ");
stream >> aux;
fecha.append(aux);
fecha.append(" ");
stream >> aux;
fecha.append(aux);

vec_cliente[i] = new Cliente(nombre,apellido,carne,fecha); //THIS trows the exception
}

}

/* Casa_Profesor 和 Cliente 之间的唯一区别是 Cliente 继承自类 Persona,而 Casa_Profesor 没有。 至于为什么这段代码如此奇怪:这是一种编程实践,但请随时指出我在这段代码中犯的任何其他编程错误(特别是关于 sizeof 的东西) 此外,我可以编辑和发布所有类的代码等等,但我想先看看是否有人可以指出我可能犯的一个明显的新手错误......在此先感谢您的帮助 */

最佳答案

我不确定当您不使用任何 vector 而只使用原始指针和数组时为什么会出现“vector 下标超出范围”。我假设您没有告诉我们一些事情!

所以我将对您的代码做一些随机评论:

vec_solicitudes = new  Casa_Profesor * [(sizeof(info)/sizeof(string))*sizeof(Casa_Profesor)];

您是否尝试在 vec_solicitudes 中为信息中的每个字符串创建 1 个 Casa_Profesor *?如果是这样,您想要:

vec_solicitudes = new  Casa_Profesor * [sizeof(info)/sizeof(string)];

这将为 (sizeof(info)/sizeof(string)) (Casa_Profesor *) 分配足够的内存。

同样:

vec_cliente = new  Cliente * [sizeof(miembros)/sizeof(string)];

但是,您的分配太大而不是太小,因此它们不是异常的原因。相反,我建议您查看 Casa_Profesor 和 Cliente 构造函数 - 它们可能是异常的来源。

关于c++ - "vector subscript out of range",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6944813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com