elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  matrices en c++ crash con algo basico en visualC++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: matrices en c++ crash con algo basico en visualC++  (Leído 5,246 veces)
newone

Desconectado Desconectado

Mensajes: 45


Ver Perfil
matrices en c++ crash con algo basico en visualC++
« 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 ?

Código:
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!!!!!
}
}
}

Código:
int main()
{
      int fecha_actualizada[32][3];
      inicializar_matriz_int((int**)fecha_actualizada,32,3,101);

      return 0;
}




En línea

APOKLIPTICO


Desconectado Desconectado

Mensajes: 3.871


Toys in the attic.


Ver Perfil
Re: matrices en c++ crash con algo basico en visualC++
« Respuesta #1 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:
Código
  1. 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

Desconectado Desconectado

Mensajes: 190



Ver Perfil WWW
Re: matrices en c++ crash con algo basico en visualC++
« Respuesta #2 en: 28 Noviembre 2010, 21:03 pm »

Eso funciona cuando es un puntero a puntero, una matriz dinámica.
Sería algo asi:
Código
  1. int main()
  2. {
  3.      //int fecha_actualizada[32][3];
  4.      int **fecha_actualizada = new int*[32];
  5.  
  6.      for( int x=0;x<32;x++ ) fecha_actualizada[x] = new int[3];
  7.  
  8.      inicializar_matriz_int( fecha_actualizada,32,3,101 );
  9.  
  10.      for( int x=0;x<32;x++ )
  11.       for( int y=0;y<3;y++ )
  12.       {
  13.       cout << " Posicion " << x << " - " << y ;
  14.       cout << " Dato: " << fecha_actualizada[x][y] << endl;
  15.       }
  16.  
  17.      //libera memoria
  18.      for(int x=0;x<32;x++)
  19.       delete[] fecha_actualizada[x];
  20.      delete[] fecha_actualizada;
  21.      //libera memoria
  22.      return 0;
  23. }
  24.  
En línea

¡Micronet!

Desconectado Desconectado

Mensajes: 159



Ver Perfil
Re: matrices en c++ crash con algo basico en visualC++
« Respuesta #3 en: 26 Diciembre 2010, 19:58 pm »

Eso funciona cuando es un puntero a puntero, una matriz dinámica.
Sería algo asi:
Código
  1. int main()
  2. {
  3.      //int fecha_actualizada[32][3];
  4.      int **fecha_actualizada = new int*[32];
  5.  
  6.      for( int x=0;x<32;x++ ) fecha_actualizada[x] = new int[3];
  7.  
  8.      inicializar_matriz_int( fecha_actualizada,32,3,101 );
  9.  
  10.      for( int x=0;x<32;x++ )
  11.       for( int y=0;y<3;y++ )
  12.       {
  13.       cout << " Posicion " << x << " - " << y ;
  14.       cout << " Dato: " << fecha_actualizada[x][y] << endl;
  15.       }
  16.  
  17.      //libera memoria
  18.      for(int x=0;x<32;x++)
  19.       delete[] fecha_actualizada[x];
  20.      delete[] fecha_actualizada;
  21.      //libera memoria
  22.      return 0;
  23. }
  24.  


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++:

Código
  1. #include<iostream>
  2. using namespace std;
  3. int main (){
  4. //Enteros
  5. int e,r,s,f,i=0,j=0,x=0,y=0;
  6.              int **mat= new int*[50];   ////Utilizando tecnica de qily
  7. //Pide Valores de Matriz 1
  8. cout<<"Valores: "<<endl;
  9. cout<<"Numero de filas: "; cin>>e;
  10. cout<<"Numero de columnas: "; cin>>f;
  11. //Lleno matriz
  12. for(i=0;i<e;i++){
  13. for(j=0; j<f; j++){
  14. mat[i][j]=rand()%100;      ///////"ERROR"
  15. }
  16. }
  17. //Muestro matriz
  18. for(i=0;i<e;i++){
  19. for(j=0; j<f; j++){
  20. cout<<mat[i][j]<<" ";
  21. }cout<<endl;
  22. }
  23. system("pause");
  24. return 0;
  25. }

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 Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: matrices en c++ crash con algo basico en visualC++
« Respuesta #4 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>

Código:
#include <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.

Código
  1. signed int **matriz = new int *[filas];                         // Filas.
  2.    for(unsigned int i = 0; i < filas; i++)
  3.    matriz[i] = new int[columnas];                              // Columnas.

Y por supuesto hay que liberar la memoria, para evitar memory leaks.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
¡Micronet!

Desconectado Desconectado

Mensajes: 159



Ver Perfil
Re: matrices en c++ crash con algo basico en visualC++
« Respuesta #5 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>

Código:
#include <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.

Código
  1. signed int **matriz = new int *[filas];                         // Filas.
  2.    for(unsigned int i = 0; i < filas; i++)
  3.    matriz[i] = new int[columnas];                              // Columnas.

Y por supuesto hay que liberar la memoria, para evitar memory leaks.







Código
  1. #include<iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4. int main (){
  5. //Enteros
  6. int e,r,s,f,j=0,x=0,y=0;
  7.          signed int **mat= new int *[50];   ////Utilizando tecnica de qily
  8. //Pide Valores de Matriz 1
  9. cout<<"Valores: "<<endl;
  10. cout<<"Numero de filas: "; cin>>e;
  11. cout<<"Numero de columnas: "; cin>>f;
  12. //Lleno matriz
  13. for(unsigned int i=0;i<e;i++){
  14. mat[i]=new int *[50];   <<error
  15. //a value of type"int **" cannot be assigment to an entity            <<error
  16. //of type "signed int *"                                                             <<error
  17. for(j=0; j<f; j++){
  18. mat[i][j]=rand()%100;      ///////"ERROR"
  19. }
  20. }
  21. //Muestro matriz
  22. for(unsigned int i=0;i<e;i++){
  23. for(j=0; j<f; j++){
  24. cout<<mat[i][j]<<" ";
  25. }cout<<endl;
  26. }
  27. system("pause");
  28. return 0;
  29. }
  30.  
  31.  
  32.  
  33.  

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 Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: matrices en c++ crash con algo basico en visualC++
« Respuesta #6 en: 27 Diciembre 2010, 18:56 pm »







Código
  1. #include<iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4. int main (){
  5. //Enteros
  6. int e,r,s,f,j=0,x=0,y=0;
  7.          signed int **mat= new int *[50];   ////Utilizando tecnica de qily
  8. //Pide Valores de Matriz 1
  9. cout<<"Valores: "<<endl;
  10. cout<<"Numero de filas: "; cin>>e;
  11. cout<<"Numero de columnas: "; cin>>f;
  12. //Lleno matriz
  13. for(unsigned int i=0;i<e;i++){
  14. mat[i]=new int *[50];   <<error
  15. //a value of type"int **" cannot be assigment to an entity            <<error
  16. //of type "signed int *"                                                             <<error
  17. for(j=0; j<f; j++){
  18. mat[i][j]=rand()%100;      ///////"ERROR"
  19. }
  20. }
  21. //Muestro matriz
  22. for(unsigned int i=0;i<e;i++){
  23. for(j=0; j<f; j++){
  24. cout<<mat[i][j]<<" ";
  25. }cout<<endl;
  26. }
  27. system("pause");
  28. return 0;
  29. }
  30.  
  31.  
  32.  
  33.  

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.



Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. using std::cout;
  5. using std::endl;
  6. using std::cin;
  7. int main(void)
  8. {
  9.    signed int filas;
  10.    signed int columnas;
  11.  
  12.    srand(time(0));
  13.  
  14.    std::cout << "Filas : ";
  15.    cin >> filas;
  16.    std::cout << "Columnas : ";
  17.    cin >> columnas;
  18.  
  19.    // Asignar espacio a la matriz:
  20.    signed int **matriz = new int *[filas];                         // Filas.
  21.    for(unsigned int i = 0; i < filas; i++)
  22.    matriz[i] = new int[columnas];                              // Columnas.
  23.  
  24.    // Asignar valores a la matriz
  25.    for(unsigned int i = 0; i < filas; i++)
  26.    {
  27.        for(unsigned int j = 0; j < columnas; j++)
  28.        {
  29.            matriz[i][j] = rand() % 100;
  30.            cout << matriz[i][j] << " ";
  31.        }
  32.        cout << endl;
  33.    }
  34.  
  35.    // Liberar el espacio de la matriz
  36.    for(unsigned int i = 0; i < filas; i++)
  37.    delete[] matriz[i];
  38.  
  39.    delete[] matriz;
  40.    return 0;
  41. }
  42.  
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
¡Micronet!

Desconectado Desconectado

Mensajes: 159



Ver Perfil
Re: matrices en c++ crash con algo basico en visualC++
« Respuesta #7 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  ;) :
Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. using namespace std;
  5. int main(void)
  6. {
  7.    signed int filas;
  8.    signed int columnas;
  9.  
  10.    srand(time(0));
  11.  
  12.    std::cout << "Filas : ";
  13.    cin >> filas;
  14.    std::cout << "Columnas : ";
  15.    cin >> columnas;
  16.  
  17.    // Asignar espacio a la matriz:
  18.    signed int **matriz = new int *[filas];                         // Filas.
  19.    for(unsigned int i = 0; i < filas; i++)
  20.    matriz[i] = new int[columnas];                              // Columnas.
  21.  
  22.    // Asignar valores a la matriz
  23.    for(unsigned int i = 0; i < filas; i++)
  24.    {
  25.        for(unsigned int j = 0; j < columnas; j++)
  26.        {
  27.            matriz[i][j] = rand() % 100;
  28.            cout << matriz[i][j] << " ";
  29.        }
  30.        cout << endl;
  31.    }
  32. cout<<endl<<endl;
  33.  
  34. cout<<"Cuantas Veces quieres hacer la suma de tu matriz ";
  35. int numv; cin>>numv; int ini=1;
  36. while(ini<=numv){
  37. //Sumando matriz
  38.  for(unsigned int i = 0; i < filas; i++)
  39.    {
  40.        for(unsigned int j = 0; j < columnas; j++)
  41. {
  42. matriz[i][j]= matriz[i][j]+ matriz[i][j];
  43.  cout << matriz[i][j] << " ";
  44. }cout<<endl;}
  45.  ini+=1;cout<<endl<<endl;
  46. }
  47.    // Liberar el espacio de la matriz
  48.    for(unsigned int i = 0; i < filas; i++){delete[] matriz[i];}
  49.  
  50. delete[] matriz;
  51. system ("pause");
  52.    return 0;
  53. }
En línea


"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Dudas en Java algo básico
Java
Blue_box 0 2,254 Último mensaje 25 Febrero 2005, 04:46 am
por Blue_box
algo de php basico
PHP
chupin 5 2,852 Último mensaje 19 Agosto 2007, 03:44 am
por chupin
algo basico: WEP
Wireless en Linux
pw 5 3,659 Último mensaje 1 Mayo 2010, 03:30 am
por Jose CSS
Ayuda Con algo muy basico « 1 2 »
.NET (C#, VB.NET, ASP)
totalmt2 10 7,269 Último mensaje 27 Diciembre 2010, 01:32 am
por .:Weeds:.
algo basico super basico pero que no me sale
Programación C/C++
Freelancer 6 4,515 Último mensaje 22 Septiembre 2011, 03:25 am
por Freelancer
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines