为什么结构会导致内存错误?

Why is the structure causing a memory error?

#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));

    strcpy(SBI->ha[0], "1234"); 

    printf("SUCCESS");

    return 0;
}

为什么上面的代码会产生内存写入错误?当我 运行 代码时,它会生成一些与内存相关的错误。我是 C 编程的初学者。任何人都可以帮助我解决导致错误的代码中的问题。

您还需要为您的三个字符串 ha[0]、ha[1]、ha[2] 分配 space。您的 malloc 为 bank 结构分配内存,包括三个 指针, 但是这些指针也需要分配,例如 mallocstrdup

for (int i = 0; i < 3; i++) {
    bank->ha[i] = malloc(MY_STRING_MAXLENGTH);
}

你以后免费:

for (int i = 0; i < 3; i++) {
    free(bank->ha[i]);
}
free(SBI);

您正在将字符串复制到未分配的内存中。

strcpy(SBI->ha[0], "1234")

使用 strdup 而不是 strcpy。 Strdup 将为您分配内存。