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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda con ficheros y structs en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con ficheros y structs en C  (Leído 5,365 veces)
chica_23

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Duda con ficheros y structs en C
« en: 18 Marzo 2011, 22:47 pm »

Hola no se si alguien ha colgado algo similar , en todo caso si alguien puede ayudarme lo agradeceria muchisimo .Se que el código que voy a poner es un poco tonto pero me gustaria que saber fallo basico estoy teniendo.Me he dado cuenta de que he puesto este msmo tema en un foro de programacion general, y acabo de descubrir que existe este , siento saturaros...


#include <ctype.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>







/******************************************************************************************************************************************************************
*******************************************************************************************************************************************************************/

 main ( int argc,char *argv[])

{
typedef struct  matric {
       
        int filas;
        int columnas;
    }matriz;
matriz *m;
int f,c;
int numero;

FILE* f1;
char* nombre_fich;
nombre_fich=argv[1];
f1=fopen(nombre_fich,"r");//abrimos fichero en modo lectura

fscanf(f1,"%d",&f);
printf("numero de filas%d",f);

//m->filas=numero;//************

fscanf(f1,"%d",&c);
//m->columnas=c;//***********
char buffer[4];
fscanf(f1,"%s",buffer);
printf("%s\n",buffer);

fclose(f1);

}

Si descomento las lineas con asteriscos me salen fallos de segmentacion!!Y no se porque..
El fichero que leo es:



3 3 1e-3
0.8 0.1 0.1
0.1 0.8 0.1
0.1 0.1 0.8

se llama fichero .txt

Muchas gracias.


En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Duda con ficheros y structs en C
« Respuesta #1 en: 18 Marzo 2011, 23:06 pm »

Porque tu m es un puntero a struct matriz, no un struct matriz.

O bien ese puntero necesitas que apunte a una estructura de tipo matriz (memoria dinámica), o bien, haz que deje de ser un puntero, y que sea una estructura


En línea

chica_23

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: Duda con ficheros y structs en C
« Respuesta #2 en: 18 Marzo 2011, 23:19 pm »

Muchisimas gracias!!!

hice que

matriz m;

en lugar de un puntero

y la asignacion m.filas=numero; y funciona
 
Estaba confundida pensando que  si hacia como antes es decir declarar m como puntero a matriz , los datos se introducirian utilizando m->filas simplemente.

Estoy en lo cierto, quiero decir , ese era mi error???
En línea

chica_23

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: Duda con ficheros y structs en C
« Respuesta #3 en: 18 Marzo 2011, 23:22 pm »

una ultima pregunta, siempre que declaro como puntero a matriz tengo que hacer un malloc entonces??
En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Duda con ficheros y structs en C
« Respuesta #4 en: 18 Marzo 2011, 23:45 pm »

Si, o al menos asignarle la dirección de otro elemento de tipo matriz.

Código
  1. matriz* puntero;
  2. puntero=(matriz *)malloc(sizeof(matriz));

Código
  1. matriz no_puntero;
  2. matriz* puntero;
  3. puntero=&no_puntero;

Tu problema antes, era que si el puntero apunta a una dirección indeterminada, o a Null, cualquier acceso, da un segmentation fault.

En línea

chica_23

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: Duda con ficheros y structs en C
« Respuesta #5 en: 19 Marzo 2011, 14:31 pm »

Todo este codigo es una consecuencia de otro problema que tenia..Abandoné y pienso que no es una mala pregunta.He estado mirando en libros y tambien en internet.

Si me dan un fichero como el anterior , lo leo e introduzco en n las filas, y en m las columnas.
luego creo un array de este tamaño m*n y
se lo paso a una funcion.
La pregunta es:
la funcion puede recibir ..

float * matriz [] [m] como parametro??
 en caso de tener una matriz de floats.

A mi me dan fallos de compilacion.
La m no puedo ponerla, siempre tengo que poner una constante en la segunda dimension.Una posibilidad que he leido por ahi es utilizar un define.

Muchas gracias de nuevo
En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Duda con ficheros y structs en C
« Respuesta #6 en: 19 Marzo 2011, 14:50 pm »

Tienes un problema ahí, si haces float *matriz[][] le estás diciendo, que va a recibir una matriz de punteros a float, no una matriz de floats.

Y a parte, hay otro problema:

una matriz con arrays bidimensionales--> matriz[m][n]

matriz --> puntero a puntero del tipo que almacenes

matriz[] es un vector del tipo que almacenes
matriz[][] es el tipo que alamacenas.

cada vez que tu haces matriz[m] seleccionas un vector,  y cuando haces matriz[m][n] del vector m, seleccionas el elemento n

La diferencia con simplemente declarar un vector de n*m elementos, es que tu eso lo tienes, por así decirlo, en un único bloque, mientras que la matriz, primero tienes un bloque con los punteros a los vectores, y luego los distintos vectores apuntados.

te pongo un ejemplo:
Código
  1. funcion1(float **matriz)
  2. //uso:
  3. funcion1(matriz);
  4.  

Código
  1. funcion2(float *vector)
  2. //uso:
  3. funcion2(matriz[algo]);
  4. funcion2(vector);
  5.  

Código
  1. funcion3(float elemento)
  2. //uso:
  3. funcion3(matriz[algo][otra_cosa]);
  4. funcion3(vector[elemento_a_buscar]);
  5.  
« Última modificación: 19 Marzo 2011, 14:52 pm por Akai » En línea

chica_23

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: Duda con ficheros y structs en C
« Respuesta #7 en: 19 Marzo 2011, 19:03 pm »

He intentado el primer ejemplo de codigo que me das con un codigo sencillo...
Siento ser tan insistente pero quiero saber si lo entiendo.

#include <ctype.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>


void op1(int** matriz)

{
printf("hola");
}



main ( int argc,char *argv[])
{
int i,j;
int m=4;
int n=4;
int matriz[m][n];


printf("vuelve a CASA VUELVEEE\n");

for (i=0;i<n;i++)
{
   for (j=1;j<m;j++)
   {
     
    matriz[j]=1;
 
     

   }
   
}op1(matriz);

}


Me dice que le paso mal el argumento matriz..
Quiero saber si lo estoy entendiendo.
Cuando me dices que en el caso de las matrices hai dos bloques distintos, esto es: una zona de memoria donde se almacenan los punteros /direcciones de la otra zona de memoria donde se guardan los contenidos de la matriz?
Y que por tanto debo indicarle a la funcion con float** matriz que realmente tiene que indexar 2 veces (o como se diga) , buscar primero el puntero y luego ir a coger el contenido?

Muchas gracias.


En línea

Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Duda con ficheros y structs en C
« Respuesta #8 en: 19 Marzo 2011, 20:00 pm »

Tu problema es el siguiente:

Código
  1. for (i=0;i<n;i++)
  2. {
  3.   for (j=1;j<m;j++)
  4.   {
  5.  
  6.    matriz[j]=1;

De esa forma, estás haciendo que el puntero de matriz, posición j, apunte a la dirección de memoria 1. Para acceder a un elemento de la matriz, es de esta forma
Código
  1. matriz[fila][columna]

Así que tu bucle, quedaría como:

Código
  1. for (i=0;i<n;i++)
  2. {
  3.   for (j=1;j<m;j++)
  4.   {
  5.  
  6.    matriz[i][j]=1;

Por otro lado, no estoy seguro que esto lo puedas hacer:
Código
  1. int m=4;
  2. int n=4;
  3. int matriz[m][n];

Debido a que el compilador necesita saber qué tamaño debe tener esa matriz, y de esa forma no estoy seguro que lo haga.
Código
  1. int matriz[4][4];
de esta forma, si lo haría correctamente en cualquier caso.  Ya digo que tengo dudas que lo primero no se haga correctamente, por eso propongo una alternativa.

Por otro lado... me extraña que te diga que le pasas mal matriz, en principio no veo que haya error ahí.
« Última modificación: 19 Marzo 2011, 20:02 pm por Akai » En línea

chica_23

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: Duda con ficheros y structs en C
« Respuesta #9 en: 19 Marzo 2011, 20:24 pm »

Lo de poner solo matriz [j] fue un error al copiar el codigo...Pero gracias igualmente.
Y si estoy de acuerdo en lo de que seguramente no me deje hacer matriz[m] [n]. Lo he probado de todas las formas humanamente posibles , lo juro XDDD y me da error.

Lo voy a hacer pasandole un struct ya me las apañaré.

Muchisimas gracias de nuevo!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Structs Y Clases
.NET (C#, VB.NET, ASP)
anion 1 2,264 Último mensaje 14 Julio 2007, 04:26 am
por MANULOMM
Duda con structs C/C++ « 1 2 »
Programación C/C++
SARGE553413 13 7,598 Último mensaje 21 Junio 2013, 18:50 pm
por pacoperico
Problema structs
Programación C/C++
Ccomplica 1 1,911 Último mensaje 30 Octubre 2013, 05:53 am
por edr89
Array de structs duda con los nombres C#
.NET (C#, VB.NET, ASP)
RevolucionVegana 2 3,093 Último mensaje 3 Junio 2017, 05:31 am
por Eleкtro
Duda sobre structs!!!
Programación C/C++
pablombf 1 1,801 Último mensaje 10 Enero 2018, 03:23 am
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines