Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: novatoc++ en 26 Junio 2019, 17:02 pm



Título: Error en medio de la ejecución
Publicado por: novatoc++ en 26 Junio 2019, 17:02 pm
Buenas tardes,

Estoy empezando en la programación y me he encontrado con un problema. En un curso hicimos un programa que genera números al azar sin que se repitan (trabajo en subvenciones y adapté el programa para que sirviera en mi trabajo, por eso veréis cosas de subvenciones en el código).

La sorpresa fue cuando quise ejecutar el programa en mi casa (windows 8.1) y el programa se me cierra en medio de la ejecución. Os dejo el código:

#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <vector>

using namespace std;
int main(int argc, char** argv) {

int total;
int a_revisar;
int i;
vector<int> v;
vector<int> v_aux;
int random_number;


cout<<"Escribe el numero de trabajadores presentados a subvencion"<<endl;
cin>>total;

a_revisar = total/10;

cout<<"Tienes que revisar los siguientes "<<a_revisar<<" casos"<<endl;

srand(time(NULL));

for(i=0; i<a_revisar; i++){

random_number = rand()%total+1;

if(v_aux[random_number] != 1){

v_aux.push_back(random_number);

v_aux[random_number] = 1;

v.push_back(random_number);

}else{
i--;
}
}


for(i=0; i<a_revisar; i++){

cout<<v<<endl;
}

return 0;
}

El código compila correctamente y al ejecutarse, me sale el cout de cuantos trabajadores presento, hago el cin del número, me dice que tengo que revisar X trabajadores y justo después me salta un error que dice:

Proyecto1.exe dejó de funcionar
El programa dejó de funcionar correctamente por un problema. Windows cerrará el programa y le notificará si existe alguna solución.


Es raro porque todos los demás programas que traje del curso sí que me funcionan, algunos con las cuatro mismas librerías que este.

Si alguien me puede ayudar, se lo agradeceré.

Saludos


Título: Re: Error en medio de la ejecución
Publicado por: Eternal Idol en 26 Junio 2019, 20:07 pm
Tenes que depurar tu programa, no se que entorno estas usando, WinDbg es lo mejor pero no lo ideal para empezar (especialmente sin saber ensamblador).

¿Que se supone que hay en esos vectores al ejecutar el primer bucle for? Nada asi que esto no puede ser bueno:
Código
  1. if(v_aux[random_number] != 1){

Revisa el uso de los vectores en general y en particular:
http://www.cplusplus.com/reference/vector/vector/operator[]/

Citar
Access element
Returns a reference to the element at position n in the vector container.

A similar member function, vector::at, has the same behavior as this operator function, except that vector::at is bound-checked and signals if the requested position is out of range by throwing an out_of_range exception.

Portable programs should never call this function with an argument n that is out of range, since this causes undefined behavior.