Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: htcv96 en 6 Abril 2016, 02:38 am



Título: Problema al ingresar variables en una aplicación (C++, Visual Studio 2010)
Publicado por: htcv96 en 6 Abril 2016, 02:38 am
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
Código:
#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
Código:
#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.


Título: Re: Problema al ingresar variables en una aplicación (C++, Visual Studio 2010)
Publicado por: MAFUS en 6 Abril 2016, 07:37 am
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.