Error en medio de la ejecución

Iniciado por novatoc++, 26 Junio 2019, 17:02 PM

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

novatoc++

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

Eternal Idol

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 (cpp) [Seleccionar]
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[]/

CitarAccess 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.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón