这个程序崩溃了。请告诉我它有什么问题。当我在结构中使用数组而不是Name[12]
之类的指针时,它不会崩溃。我想动态内存分配存在一些问题。请帮助。
#include <stdio.h>
struct struct_tag
{
int number;
char *Name;
} struct_name;
main()
{
struct_name.number = 34;
char *Name = (char *) malloc(sizeof(char));
strcpy(struct_name.Name,"A");
printf("%d", struct_name.number);
}
答案 0 :(得分:4)
您正在分配一个字符:
char *Name = (char *) malloc(sizeof(char));
然后从不使用那个记忆。毫无疑问,你打算为struct_name.Name
分配内存。但即使您已经这样做了,也可以使用两个字符填充它('a'
和'\0'
):
strcpy(struct_name.Name,"A");
会导致完全不同的错误。
你希望说:
struct_name.Name = malloc( 2 );
由于(a)您不应该将malloc()
和(b)sizeof(char)
的结果总是1
和(c),0
需要空间在你的字符串的末尾。
答案 1 :(得分:2)
错误:
您正在为*Name
分配记忆但是您没有分配
struct_name.Name
的记忆。首先,您需要为struct_name.Name
正如您已经知道的那样,您将"A"
存储在中
struct_name.Name
你应该为2个字符分配内存。("A"
是字符串,即'A'和'\ 0')
警告:
如果您想在代码中使用strcpy
函数包含string.h
。
此外,如果您在代码中使用malloc
包含stdlib.h
。
试试这个固定代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct struct_tag
{
int number;
char *Name;
}struct_name;
int main()
{
struct_name.number = 34;
struct_name.Name = malloc(sizeof(char)*2); // As you will store "A"
strcpy(struct_name.Name,"A");
printf("%d \t", struct_name.number);
printf("%s \n", struct_name.Name);
return 0;
}
答案 2 :(得分:1)
首先仔细查看代码。
char *Name = (char *) malloc(sizeof(char));
strcpy(struct_name.Name,"A");
是否已分配内存(char *Name
)以及复制字符串(struct_name.Name
)的内容?
这里你没有为struct_name.Name
分配内存。你也为一个角色分配了内存,你试图复制两个角色。(&#39; A&#39;和&#39; \ 0&#39;)。
应该是
struct_name.Name = malloc(2);