Título: matrices en c++ crash con algo basico en visualC++
Publicado por: newone en 28 Noviembre 2010, 19:15 pm
hola volviendo al estudio del c++ esoty con matrices, uzando visualc++ esto compila asi pero hace un crasHHHH como debo hacerlo ? void inicializar_matriz_int(int** m,int filas,int columnas, int dato) { for(int i=0; i<filas; i++) { for(int j=0; j<columnas; j++) { m[i][j]=dato;//CRASHHHHHHHHH!!!!! } } } int main() { int fecha_actualizada[32][3]; inicializar_matriz_int((int**)fecha_actualizada,32,3,101);
return 0; }
Título: Re: matrices en c++ crash con algo basico en visualC++
Publicado por: APOKLIPTICO en 28 Noviembre 2010, 20:42 pm
Me parece que el problema está cuando le pasas la matriz a la función, le haces un cast (int**) probá poniendo ** atrás de la matriz. Osea: inicializar_matriz_int(**fecha_actualizada,32,3,101);
Título: Re: matrices en c++ crash con algo basico en visualC++
Publicado por: Beakman en 28 Noviembre 2010, 21:03 pm
Eso funciona cuando es un puntero a puntero, una matriz dinámica. Sería algo asi: int main() { //int fecha_actualizada[32][3]; int **fecha_actualizada = new int*[32]; for( int x=0;x<32;x++ ) fecha_actualizada[x] = new int[3]; inicializar_matriz_int( fecha_actualizada,32,3,101 ); for( int x=0;x<32;x++ ) for( int y=0;y<3;y++ ) { cout << " Posicion " << x << " - " << y ; cout << " Dato: " << fecha_actualizada[x][y] << endl; } //libera memoria for(int x=0;x<32;x++) delete[] fecha_actualizada[x]; delete[] fecha_actualizada; //libera memoria return 0; }
Título: Re: matrices en c++ crash con algo basico en visualC++
Publicado por: ¡Micronet! en 26 Diciembre 2010, 19:58 pm
Eso funciona cuando es un puntero a puntero, una matriz dinámica. Sería algo asi: int main() { //int fecha_actualizada[32][3]; int **fecha_actualizada = new int*[32]; for( int x=0;x<32;x++ ) fecha_actualizada[x] = new int[3]; inicializar_matriz_int( fecha_actualizada,32,3,101 ); for( int x=0;x<32;x++ ) for( int y=0;y<3;y++ ) { cout << " Posicion " << x << " - " << y ; cout << " Dato: " << fecha_actualizada[x][y] << endl; } //libera memoria for(int x=0;x<32;x++) delete[] fecha_actualizada[x]; delete[] fecha_actualizada; //libera memoria return 0; }
Hola que tal pense hacer otro tema pero esta vez me puse a investigar (por fin jeje) y me tope con este tema.. que tiene casi el mismo error que yo... mi problema esque queria intentar llenar una matriz. de la siguiente manera en C++: #include<iostream> using namespace std; int main (){ //Enteros int e,r,s,f,i=0,j=0,x=0,y=0; int **mat= new int*[50]; ////Utilizando tecnica de qily //Pide Valores de Matriz 1 cout<<"Valores: "<<endl; cout<<"Numero de filas: "; cin>>e; cout<<"Numero de columnas: "; cin>>f; //Lleno matriz for(i=0;i<e;i++){ for(j=0; j<f; j++){ mat [i ][j ]=rand()%100; ///////"ERROR" } } //Muestro matriz for(i=0;i<e;i++){ for(j=0; j<f; j++){ cout<<mat[i][j]<<" "; }cout<<endl; } return 0; }
ya que despues de esto quiero utilizar esa misma matriz para hacer la suma de matrices Cij= Aij+Bij este programa ya lo tengo impreso desafortunadamente y... lo tengo en DevC++... pero lo quiero pasar a C++ Preguntas: int **mat= new int*[50]; me podrias explicar que se esta haciendo en este pedazo de codigo. :-[ mat [j]=rand()%100; ///////"ERROR"Entonces si esto esta incorrecto como haria para rellenar la matriz en c++ ¿?
Título: Re: matrices en c++ crash con algo basico en visualC++
Publicado por: leogtz en 26 Diciembre 2010, 20:11 pm
Te da error porque no estás incluyendo la librería adecuada para rand(), dicha librería se encuentra en <cstdlib> Lo que preguntas es sobre asignación dinámica de memoria, se crea espacio en memoria primero para las filas, te falta asignar espacio para las columnas. signed int **matriz = new int *[filas]; // Filas. for(unsigned int i = 0; i < filas; i++) matriz[i] = new int[columnas]; // Columnas.
Y por supuesto hay que liberar la memoria, para evitar memory leaks.
Título: Re: matrices en c++ crash con algo basico en visualC++
Publicado por: ¡Micronet! en 27 Diciembre 2010, 18:25 pm
Te da error porque no estás incluyendo la librería adecuada para rand(), dicha librería se encuentra en <cstdlib> Lo que preguntas es sobre asignación dinámica de memoria, se crea espacio en memoria primero para las filas, te falta asignar espacio para las columnas. signed int **matriz = new int *[filas]; // Filas. for(unsigned int i = 0; i < filas; i++) matriz[i] = new int[columnas]; // Columnas.
Y por supuesto hay que liberar la memoria, para evitar memory leaks. #include<iostream> #include <cstdlib> using namespace std; int main (){ //Enteros int e,r,s,f,j=0,x=0,y=0; signed int **mat= new int *[50]; ////Utilizando tecnica de qily //Pide Valores de Matriz 1 cout<<"Valores: "<<endl; cout<<"Numero de filas: "; cin>>e; cout<<"Numero de columnas: "; cin>>f; //Lleno matriz for(unsigned int i=0;i<e;i++){ mat[i]=new int *[50]; <<error //a value of type"int **" cannot be assigment to an entity <<error //of type "signed int *" <<error for(j=0; j<f; j++){ mat [i ][j ]=rand()%100; ///////"ERROR" } } //Muestro matriz for(unsigned int i=0;i<e;i++){ for(j=0; j<f; j++){ cout<<mat[i][j]<<" "; }cout<<endl; } return 0; }
bueno use el codigo q me dijiste y masomenos como haya entendido me salen esos errores.. y si lo de rand si fue por la libreria no me acordaba..
Título: Re: matrices en c++ crash con algo basico en visualC++
Publicado por: leogtz en 27 Diciembre 2010, 18:56 pm
#include<iostream> #include <cstdlib> using namespace std; int main (){ //Enteros int e,r,s,f,j=0,x=0,y=0; signed int **mat= new int *[50]; ////Utilizando tecnica de qily //Pide Valores de Matriz 1 cout<<"Valores: "<<endl; cout<<"Numero de filas: "; cin>>e; cout<<"Numero de columnas: "; cin>>f; //Lleno matriz for(unsigned int i=0;i<e;i++){ mat[i]=new int *[50]; <<error //a value of type"int **" cannot be assigment to an entity <<error //of type "signed int *" <<error for(j=0; j<f; j++){ mat [i ][j ]=rand()%100; ///////"ERROR" } } //Muestro matriz for(unsigned int i=0;i<e;i++){ for(j=0; j<f; j++){ cout<<mat[i][j]<<" "; }cout<<endl; } return 0; }
bueno use el codigo q me dijiste y masomenos como haya entendido me salen esos errores.. y si lo de rand si fue por la libreria no me acordaba.. Mal, sigues teniendo errores, el código que te puse fue para que lo copiaras y pegaras, donde ponía filas debías poner tu variable que usaste para las filas, igual para las columnas. Otra cosa, ¿por qué le pones nombres a las variables como e -> filas, f -> columnas?, los nombres para las variables deben ser especificos para lo que quieres hacer, para el contexto del programa, ayudate a ti mismo. #include <iostream> #include <cstdlib> #include <ctime> using std::cout; using std::endl; using std::cin; int main(void) { signed int filas; signed int columnas; srand(time(0)); std::cout << "Filas : "; cin >> filas; std::cout << "Columnas : "; cin >> columnas; // Asignar espacio a la matriz: signed int **matriz = new int *[filas]; // Filas. for(unsigned int i = 0; i < filas; i++) matriz[i] = new int[columnas]; // Columnas. // Asignar valores a la matriz for(unsigned int i = 0; i < filas; i++) { for(unsigned int j = 0; j < columnas; j++) { matriz[i][j] = rand() % 100; cout << matriz[i][j] << " "; } cout << endl; } // Liberar el espacio de la matriz for(unsigned int i = 0; i < filas; i++) delete[] matriz[i]; delete[] matriz; return 0; }
Título: Re: matrices en c++ crash con algo basico en visualC++
Publicado por: ¡Micronet! en 30 Diciembre 2010, 08:54 am
Otra cosa, ¿por qué le pones nombres a las variables como e -> filas, f -> columnas?, los nombres para las variables deben ser especificos para lo que quieres hacer, para el contexto del programa, ayudate a ti mismo.
La verdad no ce... normalmente uso extras para trabajar mejor aunque se que hago uso inecesario de memoria... pero intentare no hacerlo muchas gracias leo... logre lo que queria hacer en C++ =] Suma La matriz con la misma matriz las veces que quieras (por si se le es util a quien tubo el problema desde un inicio ;) : #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main(void) { signed int filas; signed int columnas; std::cout << "Filas : "; cin >> filas; std::cout << "Columnas : "; cin >> columnas; // Asignar espacio a la matriz: signed int **matriz = new int *[filas]; // Filas. for(unsigned int i = 0; i < filas; i++) matriz[i] = new int[columnas]; // Columnas. // Asignar valores a la matriz for(unsigned int i = 0; i < filas; i++) { for(unsigned int j = 0; j < columnas; j++) { matriz [i ][j ] = rand() % 100; cout << matriz[i][j] << " "; } cout << endl; } cout<<endl<<endl; cout<<"Cuantas Veces quieres hacer la suma de tu matriz "; int numv; cin>>numv; int ini=1; while(ini<=numv){ //Sumando matriz for(unsigned int i = 0; i < filas; i++) { for(unsigned int j = 0; j < columnas; j++) { matriz[i][j]= matriz[i][j]+ matriz[i][j]; cout << matriz[i][j] << " "; }cout<<endl;} ini+=1;cout<<endl<<endl; } // Liberar el espacio de la matriz for(unsigned int i = 0; i < filas; i++){delete[] matriz[i];} delete[] matriz; return 0; }
|