C语言 使用带有结构的malloc



一直在阅读这里的一些线程并观看一些YouTube视频,并在涉及我正在尝试执行的任务时努力让malloc"点击"。

如果这是重复的,请提前道歉,但我无法在另一个线程上找到明确的答案。

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

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 应用于我的代码?

假设我是否有如下结构数组:

// Variable Declarations
struct strPerson    Person[5];

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

我目前正在没有 malloc 的情况下执行此操作,但我想这是低效的,因为可能会超过字符串数组长度之一。无论如何:

// 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() 为结构体赋值)

malloc函数用于确定存储值所需的内存量。sizeof运算符执行此操作。

malloc的作用是动态分配给定量的内存供程序使用。

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

for (nCount = 0; nCount < 5; nCount++)
memset(&Person[nCount], 0, sizeof(Person[nCount]);

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

memset(Person, 0, sizeof(Person);

相关内容

  • 没有找到相关文章

最新更新