为什么结构会导致内存错误?
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 结构分配内存,包括三个 指针, 但是这些指针也需要分配,例如 malloc
或 strdup
:
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 将为您分配内存。
#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 结构分配内存,包括三个 指针, 但是这些指针也需要分配,例如 malloc
或 strdup
:
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 将为您分配内存。