Hola a todos, soy nuevo aki, y os cuento mi problema.
Programo en C++ en Linux, y me aparece una violacion de segmento en un bucle que esta bien implementado. Si alguien me puede ayudar gracias, aki adjunto los archivos que componen mi programa:
___________________________________________
Matriz_basico.h
___________________________________________
#ifndef matriz_basico
#define matriz_basico
struct Matriz {
int **m;
int filas;
int columnas;
};
void CrearMatriz (Matriz & m, int f, int c);
int FilasMatriz (const Matriz & m);
int ColumnasMatriz (const Matriz & m);
void SetMatriz (Matriz & m, int i, int j, int v);
int GetMatriz (const Matriz & m, int i, int j);
void DestruirMatriz (Matriz & m);
#endif
_________________________________________
Matriz_basico.cpp
_________________________________________
#include <iostream>
#include "matriz_basico.h"
void CrearMatriz (Matriz & m, int f, int c){
m.filas = f;
m.columnas = c;
m.m = new int *[f];
for (int i=0; i<f; i++)
m.m[i] = new int [c];
for (int i=0; i<f; i++)
for (int j=0; j<c; j++)
m.m[i][j] = 0;
}
int FilasMatriz (const Matriz & m){
return m.filas;
}
int ColumnasMatriz (const Matriz & m){
return m.columnas;
}
void SetMatriz (Matriz & m, int i, int j, int v){
m.m[i][j] = v;
}
int GetMatriz (const Matriz & m, int i, int j){
int valor=0;
valor = m.m [i][j];
return valor;
}
void DestruirMatriz (Matriz & m){
int f=0;
f = m.filas;
for (int i=0; i<f; i++)
delete m.m[i];
delete m.m;
}
____________________________________________
Matriz_adicional.h
____________________________________________
#ifndef matriz_adicional
#define matriz_adicional
void LeerMatriz (Matriz & m);
void EscribirMatriz (const Matriz & m);
int Maximo (const Matriz & m);
int Minimo (const Matriz & m);
#endif
_______________________________________________
Matriz_adicional.cpp
_______________________________________________
#include <iostream>
#include "matriz_basico.h"
#include "matriz_adicional.h"
using namespace std;
void LeerMatriz (Matriz & m){
int valor=0;
cout << "Introduzca los elementos de la matriz: " << endl;
for (int j=0; j<FilasMatriz (m); j++){
for (int h=0; h<ColumnasMatriz (m); h++){
cout << "Elemento " << j+1 << "," << h+1 << ":";
cin >> valor;
SetMatriz (m, j, h, valor);
}
}
cout<<"si sale";
}
void EscribirMatriz (const Matriz & m){
int temporal=0, filas=0, columnas=0;
filas = FilasMatriz (m);
columnas = ColumnasMatriz (m);
for (int i=0; i<filas; i++){
for (int j=0; j<columnas; j++){
temporal = GetMatriz (m, i, j);
cout << temporal << "\t";
}
cout << "\n";
}
}
int Maximo (const Matriz & m){
int maximo=0, temporal=0, filas=0, columnas=0;
filas = FilasMatriz (m);
columnas = ColumnasMatriz (m);
for (int i=0; i<filas; i++){
for (int j=0; j<columnas; j++){
temporal = GetMatriz (m, i, j);
if (temporal > maximo)
maximo = temporal;
}
}
return maximo;
}
int Minimo (const Matriz & m){
int minimo=0, temporal=0, filas=0, columnas=0;
filas = FilasMatriz (m);
columnas = ColumnasMatriz (m);
for (int i=0; i<filas; i++){
for (int j=0; j<columnas; j++){
temporal = GetMatriz (m, i, j);
if (temporal < minimo)
minimo = temporal;
}
}
return minimo;
}
_______________________________________________
magica.cpp
_______________________________________________
//este es el programa principal, voy a poner solo hasta donde falla
#include <iostream>
#include "matriz_basico.h"
#include "matriz_adicional.h"
using namespace std;
int main (){
Matriz magica;
int suma=0, mem=0, filas=0, columnas=0;
int *vector;
bool magica_bool=true;
cout << "Introduzca las dimensiones de la matriz: " << endl;
cin >> filas;
cin >> columnas;
CrearMatriz (magica, filas, columnas);
LeerMatriz (magica);
.
.
.
.
.