首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将malloc与结构一起使用

将malloc与结构一起使用
EN

Stack Overflow用户
提问于 2017-03-20 07:06:59
回答 1查看 88关注 0票数 0

我在这里读了一些帖子,看了一些YouTube视频,当涉及到我正在尝试做的这项任务时,我努力让malloc‘点击’。

如果这是重复的,请提前道歉,但我在另一个帖子上找不到明确的答案。

假设我有一个用于定义个人数据的结构,声明如下:

代码语言:javascript
运行
复制
    struct strDate
    {
        int     nDay;
        int     nMonth;
        int     nYear;
    };

    struct  strTime
    {
        int     nSeconds;
        int     nMinutes;
        int     nHours;
    };

    struct strName
    {
        char            arcTitle[10];
        char            arcFirstName[50];
        char            arcMiddleName[50];
        char            arcSurname[50];
    };

    struct strPerson
    {
        struct strDate  strDOB;
        struct strName  strFullName;
        struct strTime  strStartTime;
        struct strDate  strStartDate;
        char            arcJobTitle[31];
        int             nEmployeeNumber;
    };

我目前对Malloc的理解如下:

Malloc可用于确定存储值需要多少内存(取决于类型和大小等)。这可以应用于创建链接列表,方法是在指向列表中下一个值的每个值的末尾放置指针。

我该如何将malloc应用到我的代码中?

假设我有一个结构数组,如下所示:

代码语言:javascript
运行
复制
    // Variable Declarations
    struct strPerson    Person[5];

假设我想先用空白占位符填充数据(以防止从内存中提取无用的值),然后用数据填充一个结构,我如何确保它使用了适当数量的malloc内存?

我目前在没有malloc的情况下这样做,但是我想这是低效的,因为它可能会超过字符串数组的长度之一。不管怎么说:

代码语言:javascript
运行
复制
// Blank Data
for (nCount = 0; nCount < 5; nCount++)
        fnDefaultBlankPersonData(&Person[nCount]); // fills all structures with blank data to avoid unusual values pulled from memory


// Real Data
fnPopulatePersonData(&Person[0], "Mr", "PlaceholderFirst", "PlaceholderMiddle", "PlaceholderLast", "PlaceholderJobTitle", 1, 1, 1980, 1, 9, 2001, 8, 0, 0, 6);

主要关注上面的“真实数据”填充:我如何确保结构的大小适合数据,并且如果我重新运行函数来重新填充它,可以调整大小?

(上面的两个函数只是用=和strcpy()给struct赋值)

EN

回答 1

Stack Overflow用户

发布于 2017-03-20 07:19:02

malloc函数不用于确定存储值需要多少内存。sizeof操作符就是这样做的。

malloc所做的是为您的程序动态分配给定数量的内存。

在您的用例中,看起来不需要malloc。您正在寻找清除内存的一部分,以便它包含已知值。如果希望所有字节都包含0,可以使用memset函数:

代码语言:javascript
运行
复制
for (nCount = 0; nCount < 5; nCount++)
    memset(&Person[nCount], 0, sizeof(Person[nCount]);

更好的是,您可以一次对整个数组执行此操作,而不是对每个元素执行一次:

代码语言:javascript
运行
复制
memset(Person, 0, sizeof(Person);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42893431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档