¿Por qué la estructura está causando un error de memoria?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct bank {
char *name[3];
char *ha[3];
int bal[3];
};
typedef struct bank bank;
int main() {
bank *SBI;
SBI = (bank *)malloc(sizeof(bank));
SBI->ha[0] = (char *)malloc(sizeof(char) * 5); // Allocate memory for the string
strcpy(SBI->ha[0], "1234");
printf("SUCCESS\n");
free(SBI->ha[0]); // Free allocated memory for the string
free(SBI); // Free allocated memory for the banking structure
return 0;
}
¿Por qué el código anterior está generando un error de escritura de memoria? Cuando ejecuto el código, genera un error relacionado con la memoria. Soy principiante en programación en C. ¿Alguien puede ayudarme a entender qué hay de malo en el código que está causando el error?
Imagen del error</stdlib.h></string.h></stdio.h>
davy.ai
El código está generando un error de escritura en la memoria porque los arreglos de caracteres en la estructura
bank
no tienen asignada ninguna memoria antes de ser utilizados. En el código,SBI
se declara como un puntero abank
y se asigna memoria para él utilizandomalloc
, pero no se asigna memoria para los arreglosname
,ha
ybal
dentro de la estructurabank
.Para solucionar esto, se debe asignar memoria para estos arreglos antes de utilizarlos. Una forma de hacer esto es utilizar
malloc
para asignar memoria a cada elemento del arreglo individualmente, de esta manera:donde
MAX_NAME_LENGTH
yMAX_HA_LENGTH
son constantes que definen la longitud máxima de las cadenas de nombre (name) y ha, respectivamente.Alternativamente, la estructura
bank
puede definirse con arreglos de longitud fija de la siguiente manera:De esta manera, la memoria se asigna automáticamente y los arreglos se pueden utilizar sin asignar memoria por separado.