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


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Puteros dobles y cadena de caracterez reservar memoria dinamica
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Puteros dobles y cadena de caracterez reservar memoria dinamica  (Leído 6,642 veces)
Iclax

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Puteros dobles y cadena de caracterez reservar memoria dinamica
« en: 18 Agosto 2022, 22:19 pm »

Buenas! tengo un problema y no logro entender que lo esta causando, he reservado memoria para multiples cadena y que cada cadena reserve una cantidad de memoria, el problema esta que al momento de usar la funcion me genera error y se cierra el programa, al depurar me di cuenta que no cambia los valores al momento de usar la funcion y se produce el error. Como puedo solucionarlo?

codigo:
Código:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void cargar(char**,int);

int main(){

    int N = 3;
    int i;
    char **array;

    cargar(array,N);

    for(i=0;i<N;i++){

        printf("\n\nNOMBRE: %s\n ",array[i]);

    }

    free(array);

}

void cargar(char **array,int lon){

    int i,tam;
    char valor[10];

    array = (char**)malloc(lon*sizeof(char*));

    for(i=0;i<lon;i++){

        printf("Ingrese un nombre: ");
        scanf("%10[^\n]",valor);

        fflush(stdin);

        tam = strlen(valor);

        array[i] = (char*)malloc(tam*sizeof(char));
        if(*(array + i) == NULL){
            printf("No se pudo asignar");
            exit(-1);
        }
        strcpy(*(array + i),valor);
    }
}


En línea

RayR

Desconectado Desconectado

Mensajes: 243


Ver Perfil
Re: Puteros dobles y cadena de caracterez reservar memoria dinamica
« Respuesta #1 en: 19 Agosto 2022, 16:55 pm »

Primero, usar fflush con flujos de entrada, como stdin, nunca ha sido válido. Varios compiladores lo admiten pero no es correcto y, si lo compilaras, por ejemplo, con Visual C++, no limpiaría el buffer ni haría nada. Puedes sustituir esa línea por algo como esto:

Código
  1. while (getchar() != '\n');

En cuanto al error, es porque estás pasando por valor el puntero a puntero ("puntero doble") a "cargar", por lo que esta función lo que modifica es una copia de array; al volver a main, la variable array original sigue sin inicializarse. En realidad la función cargar debería recibir un puntero a puntero a puntero:

Código
  1. void cargar(char***, int);

y debes pasarle la dirección de array (&array):

Código
  1. cargar(&array, N);

y dentro de la función, en donde accedas a array, cambiarlo por *array:

Código
  1. *array = (char**)malloc(lon * sizeof(char*));
  2. ...
  3. (*array)[i] = (char*)malloc(tam * sizeof(char));

y así con las demás líneas.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
reservar memoria para punteros en C « 1 2 3 »
Programación C/C++
Ghalad 23 18,939 Último mensaje 1 Junio 2010, 20:54 pm
por Ghalad
Reservar memoria con new a una clase con varios elementos y constructor.
Programación C/C++
anonimo12121 7 4,420 Último mensaje 17 Febrero 2012, 15:39 pm
por naderST
Estructuras y reservar memoria
Programación C/C++
kraiked 4 3,789 Último mensaje 25 Febrero 2016, 23:01 pm
por lfgmespino
Problemas de perdida de memoria con memoria dinamica
Programación C/C++
ing_maipu 1 2,335 Último mensaje 28 Octubre 2017, 18:48 pm
por CalgaryCorpus
Ayuda al reservar memoria con calloc
Programación C/C++
agrichi 1 2,027 Último mensaje 13 Diciembre 2017, 18:24 pm
por CalgaryCorpus
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines