Pregunta sobre la memoria y el realloc() en C
Publicado por William Atef (11 intervenciones) el 14/04/2020 20:22:02
Hola buenas. Teniendo el cuenta el siguiente código:
Tengo una duda respecto al realloc y mi variable puntero. Al incio yo declaro un tipo de dato struct llamado CONTACT. Más abajo creo un puntero que hace referencia a una posición en memoria que contiene un elemento de tipo CONTACT. Después yo uso el malloc y creo el espacio para una variable CONTACT. Hasta aqui todo OK. Si yo accedo a lo que señala el puntero "list", obtendría la variable de tipo CONTACT si yo le asigno el name y el email.
El problema viene cuando yo uso la función realloc y agrando la memoria para "list". Después para acceder a las diferentes instancias tipo CONTACT uso una array. Es decir list[0], list[1]...
Por que es así? Realloc lo que hace es agrandar la memoria y al trozo que agranda le asigna una posición en una array? No entiendo nada y estoy muy confundido la verdad.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef char NAME[100];
typedef char EMAIL[100];
typedef struct {
NAME name;
EMAIL email;
} CONTACT;
int main( int argc, const char * argv[] )
{
CONTACT * list = NULL;
char buffer[100];
int goOn, listSize = 0;
do {
printf( "Ingrese el nombre del nuevo contacto (0 para terminar):\n " );
scanf( "%99s", buffer );
if ( strcmp( "0", buffer ) != 0 ) {
if ( !list ) {
list = malloc( sizeof( CONTACT ) );
} else {
list = realloc( list, sizeof( CONTACT ) * ( listSize + 1 ) );
}
strcpy( list[ listSize ].name, buffer );
printf( "Ingrese el email de %s:\n", buffer );
scanf("%99s", buffer);
strcpy( list[ listSize ].email, buffer );
goOn = 1;
listSize++;
} else {
goOn = 0;
}
} while ( goOn );
printf("\n Esta es tu lista de contactos:\n" );
printf("Nombre\t\tEmail\n");
for ( int i = 0; i < listSize; i++ ) {
printf( "%s\t\t\%s\n", list[i].name, list[i].email );
}
return 0;
}
Tengo una duda respecto al realloc y mi variable puntero. Al incio yo declaro un tipo de dato struct llamado CONTACT. Más abajo creo un puntero que hace referencia a una posición en memoria que contiene un elemento de tipo CONTACT. Después yo uso el malloc y creo el espacio para una variable CONTACT. Hasta aqui todo OK. Si yo accedo a lo que señala el puntero "list", obtendría la variable de tipo CONTACT si yo le asigno el name y el email.
El problema viene cuando yo uso la función realloc y agrando la memoria para "list". Después para acceder a las diferentes instancias tipo CONTACT uso una array. Es decir list[0], list[1]...
Por que es así? Realloc lo que hace es agrandar la memoria y al trozo que agranda le asigna una posición en una array? No entiendo nada y estoy muy confundido la verdad.
Valora esta pregunta


0