Autor
|
Tema: matrices en c++ crash con algo basico en visualC++ (Leído 5,259 veces)
|
newone
Desconectado
Mensajes: 45
|
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; }
|
|
|
En línea
|
|
|
|
APOKLIPTICO
Desconectado
Mensajes: 3.871
Toys in the attic.
|
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);
|
|
|
En línea
|
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore ASUS M4A89GTD-PRO/USB3 2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T) Seagate 500 Gb XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
|
|
|
Beakman
|
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; }
|
|
|
En línea
|
|
|
|
¡Micronet!
Desconectado
Mensajes: 159
|
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++ ¿?
|
|
|
En línea
|
"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"
|
|
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
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.
|
|
|
En línea
|
|
|
|
¡Micronet!
Desconectado
Mensajes: 159
|
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..
|
|
|
En línea
|
"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"
|
|
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
#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; }
|
|
|
En línea
|
|
|
|
¡Micronet!
Desconectado
Mensajes: 159
|
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; }
|
|
|
En línea
|
"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Dudas en Java algo básico
Java
|
Blue_box
|
0
|
2,259
|
25 Febrero 2005, 04:46 am
por Blue_box
|
|
|
algo de php basico
PHP
|
chupin
|
5
|
2,859
|
19 Agosto 2007, 03:44 am
por chupin
|
|
|
algo basico: WEP
Wireless en Linux
|
pw
|
5
|
3,676
|
1 Mayo 2010, 03:30 am
por Jose CSS
|
|
|
Ayuda Con algo muy basico
« 1 2 »
.NET (C#, VB.NET, ASP)
|
totalmt2
|
10
|
7,279
|
27 Diciembre 2010, 01:32 am
por .:Weeds:.
|
|
|
algo basico super basico pero que no me sale
Programación C/C++
|
Freelancer
|
6
|
4,525
|
22 Septiembre 2011, 03:25 am
por Freelancer
|
|