为什么这个程序崩溃我错误地分配了内存

时间:2014-09-02 12:54:45

标签: c

这个程序崩溃了。请告诉我它有什么问题。当我在结构中使用数组而不是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);
}

3 个答案:

答案 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); 
相关问题