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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Re: Llenar matriz de estructuras con punteros en c en: 14 Julio 2018, 09:25 am
Logre encontrar el error, la funcion Get_R en ciertas ocasiones me lanza NULL
 y eh ahi que me lanzaba el fallo de segmentacion por que hacia strdup(NULL), lo que no entiendo es por que en windows me dejaba correr el codigo y no me marcaba algun fallo, pero bueno.

Muchas Gracias por tu ayuda y por las sugerencias..

pd: si tienes razon sobre que me faltaba ese strdup....
2  Programación / Programación C/C++ / Re: Llenar matriz de estructuras con punteros en c en: 12 Julio 2018, 19:36 pm
No sé cómo has declarado el dato Pagina **paginas fuera de la función.
Si es un array de dos dimensiones el argumento de la función debe ser un array de dos dimensiones donde obligatoriamente la de más a la derecha debe estar definida. Es decir:
Si has declarado el array en main() o dónde sea como
Código:
Pagina paginas[MARCOS][PAGINAS];
El argumento de la función debe ser
Código:
int* Escribir_swap( ..., Pagina paginas[][PAGINAS], ...) {

La define como variable global de esta forma
Código
  1. Pagina **Paginas
posteriormente reservomemoria para ella dentro del main
Código
  1. Paginas = (Pagina **)malloc(MARCOS*sizeof(Pagina *));
  2. for ( i =0; i<MARCOS; i++)
  3.       Pagina[i] = (Pagina *)malloc(PAGINAS*sizeof(Pagina));
  4.  

De hecho de igual forma intente hacerlo como array y da el mismo resultado, solo llena la primera estructura, falla cuando
Código:
 i = 0 y j =1
como si perdiera la referencia
3  Programación / Programación C/C++ / Re: Llenar matriz de estructuras con punteros en c en: 12 Julio 2018, 06:14 am
El problema podría estar en la forma de tratar el argumento de la función Pagina **Paginas. Es un puntero a puntero por tanto toda información del tamaño de las dimensiones ha desaparecido, sólo se conoce el tamaño del tipo de dato. Esto hace que al usarlo como matriz en Paginas[i][j] el programa no sepa cuántos bytes deba saltar por cada incremento de i.

Como podria mantener esa informacion, de que manera podria indicar el desplazamiento de cada ciclo?
4  Programación / Programación C/C++ / Llenar matriz de estructuras con punteros en c en: 12 Julio 2018, 03:54 am
Estoy intentado llenar una matriz de estructuras usando punteros, pero solo lo hace para la primera corrida de los ciclos despues me manda un fallo de segmento, habia comenzado a escribirlo en windows y corria bien el llenado lo hacia pero ahora lo estoy corriendo en linux y no se que pasa.

Si me pudieran decir donde tengo mi error se los agradeceria :p


Codigo:
Estructura
Código
  1. struct Pagina
  2. {
  3.    char *Instruccion;
  4.    char *register1;
  5.    char *register2;
  6. };



Código
  1. int *Escribir_swap(const char *PCB,  TMS *TABLE_TMS, Pagina **Paginas, int dk){ /*dk numero de marcos a utilizar el proceso*/
  2.    FILE *A;
  3.    char exeption[5] = " \n\t,";
  4.    char LINE[LONG_MAX_LINE];
  5.    int TAM = 0, flag = 0; /*para controlar si creo una nueva pagina en la tms*/
  6.    int *pos = (int *)malloc(dk*sizeof(int)); /* Vamos guardando las posiciones que ocupara el proceso en la swap*/
  7.    int i = 0, j = 0, num_page = 0;
  8.  
  9.    for(i = 0; i < MARCOS; i++){
  10.        if(enable_pos[i] == 1){
  11.            for(j = 0; j < PAGINAS; j++){
  12.                if( strcmp(Get_I(TAM, PCB, LINE, exeption, A),  "END") == 0 ){
  13.                    flag = 0;
  14.                    break;
  15.                 }
  16.                 else{
  17.                    (Paginas[i][j].Instruccion = strdup(Get_I(TAM, PCB, LINE, exeption, A)));
  18.                    (Paginas[i][j].register1 = strdup(Get_R(TAM, PCB, LINE, exeption, A, 1)));
  19.                    (Paginas[i][j].register2 = strdup(Get_R(TAM, PCB, LINE, exeption, A, 2)));
  20.  
  21.                    TABLE_TMS[i].NOM_ARCHIVO = PCB; /*nombre del proceso en la tms*/
  22.                    TABLE_TMS[i].num_page = num_page;  /*el numero de pagina en la tms*/
  23.                    enable_pos[i] = 0; /*activamos bandera en esa posicion para indicar que esta ocupada*/
  24.                    pos[num_page] = i; /*llenamos el vector que contiene la posicion de las paginas en la swap*/
  25.                    flag = 1;
  26.                    TAM++;
  27.                }
  28.            }
  29.        }
  30.        if (flag == 1 & num_page <= dk) /* si creo la nueva pagina*/
  31.         {
  32.             num_page++;  /*creamos el nuevo indice para una nueva pagina*/
  33.         }
  34.    }
  35.    return pos;
  36. }
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines