c-下面的程序在不使用malloc()的情况下如何工作



我有下面的C程序。

#include<stdio.h>
#include<stdlib.h>
enum country_name
{
    Germany, France, Spain
};
int main()
{
    struct employee
    {
            char *name;
            int age;
            float bs;
            enum country_name country;
    };
    typedef struct employee EMPLOYEE;
    EMPLOYEE e;
    //e.name = malloc(30);
    e.name = "Manuel";
    e.age = 25;
    e.bs = 25000;
    e.country = Germany;
    printf("Name: %sn",e.name);
    printf("Age: %dn",e.age);
    printf("Salary: %fn",e.bs);
    printf("Country: %dn",e.country);
    return 0;
}

正如你所看到的,我已经评论了malloc()。我期待着某种类型的警告或错误。

然而,当我运行程序时,它会给出预期的输出。

-bash-4.1$ ./a.out
Name: Manuel
Age: 25
Salary: 25000.000000
Country: 0
-bash-4.1$

我想我需要使用malloc()来分配内存。在这种情况下,malloc()真的不是必需的吗?

编辑:阅读以下答案后。

好吧,所以我想我是在尝试这样做,看看注释掉malloc()是否会导致任何错误。

char nameHold[30] = "Manuel";
e.name = malloc(30);
strcpy(e.name, namoHold );

在这种情况下,如果我不使用malloc(),就会出现"分段错误"。

只要在源代码中有"Manuel"就足以让编译器分配一个包含字符串"Manuel"的只读内存块。您的代码将此内存块的地址分配给e.name

如果没有注释掉malloc调用,您的代码就不会将字符串"Manuel"存储到用malloc分配的内存中;相反,它分配100个字节(并使e.name指向100个字节的块),然后使e.name指向只读字符串"Manuel"(因此现在没有指向100字节块的指针)。

相关内容

  • 没有找到相关文章

最新更新