Problema al ingresar variables en una aplicación (C++, Visual Studio 2010)

Iniciado por htcv96, 6 Abril 2016, 02:38 AM

0 Miembros y 1 Visitante están viendo este tema.

htcv96

Buenas noches, soy nuevo en el foro y entre porque necesito ayuda en un trabajo de la universidad. No estoy pidiendo que me lo hagan, simplemente necesito que alguien sea tan amable de explicar porque salta error. El código es de una aplicación que permite ingresar letras y las muestra en una ListBox, realmente no se cuál es el problema y no he encontrado ninguna solución en internet asi que si pueden ayudarme estaría muy agradecido. El código está trabajado en Visual Studio 2010.

Este es el código de la clase
#ifndef _GESTION_H_INCLUDED
#define _GESTION_H_INCLUDED
#include <iostream>

class CGestionCaracteres{
private:
int N;
char* Vec;
public:
CGestionCaracteres(){
int N = 0;
Vec = new char[N];
}
~CGestionCaracteres(){}
//
int getN(){
return N;
}
char* getVec(){
return Vec;
}
//
void AgregarElemento(char x){
//if (aux >= 65 && aux <= 90 || aux >= 97 && aux <= 122)
char* Aux = new char[N + 1];

if (ComprobarX(x) == false){
N++;
Vec[N - 1] = x;
}
else{
Aux[0] = x;
for (int i = 0; i < N; i++){
Aux[i + 1] = Vec[i];
}
delete Vec;
N++;
Vec = Aux;
delete Aux;
}
}
/* */
};

#endif _GESTION_H_INCLUDED


y esta parte es del código de la ventana
#pragma once
#include "Gestion.h"

namespace GestionCaracteres {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

/// <summary>
/// Summary for frmPrincipal
/// </summary>
public ref class frmPrincipal : public System::Windows::Forms::Form
{
private:
CGestionCaracteres* gestion;
public:
frmPrincipal(void)
{
InitializeComponent();
//
//TODO: Add the constructor code here
//
gestion = new CGestionCaracteres();
}
/* */
#pragma endregion
private: System::Void btnAgregar_Click(System::Object^  sender, System::EventArgs^  e) {
if (tbxAgregar->Text != ""){
char caracter = Convert::ToChar(tbxAgregar->Text);
if (caracter >= 65 && caracter <= 90 || caracter >= 97 && caracter <= 122){
gestion->AgregarElemento(caracter);
CargarLista();
}
else{
MessageBox::Show("Introduzca un valor valido.");
}
}
else{
MessageBox::Show("Introduzca una letra.");
}


}
void CargarLista(){
lbxLetras->Items->Clear();
for (int i = 0; i < gestion->getN(); i++){
lbxLetras->Items->Add((gestion->getVec()[i]).ToString());
}
}
};
}


El código si compila, la validación para verificar si es una letra también, el problema surge cuando se ingresa una letra y salta un error que me pide cerrar la ventana. Si es necesaria otra parte del código por favor pídanmela. Gracias de antemano.

MAFUS

Si haces Vec=Aux y delete Aux lo liberas todo, si acaso deberías copia el array por valorz en vez de por referencia.
Para liberar arrays, que yo recuerde,  es con delete[] en vez de simplemente delete.
Por lo demás lo he revisado por encima. Puede que haya más cosas.