首页 > 解决方案 > 真的迷失了如何在 C 中填充分配的内存

问题描述

所以对于我正在做的一个项目,我有两个文件。在第一个文件中,我有一个 typedef 结构,它是一个头文件。在第二个中,我使用 malloc() 分配内存,然后我尝试使用我在第一个文件中使用“。”的结构填充分配的内存。操作员。

不知道该怎么做...

文件 1 如下所示:

typedef struct
{
     /* members */
}THING;

文件 2 看起来像这样(不是主要的):

int *ptr;
ptr = malloc(sizeof(THING)); //allocates memory for THING

标签: cpointersmemory-managementstructvariable-assignment

解决方案


int *ptr;
ptr = malloc(sizeof(THING));

ptr是一个指向int但不合适的指针,因为你想指向结构THING

需要将指针定义为指向THING->的指针THING *ptr

然后我试图用我在第一个文件中使用“。”的结构填充分配的内存。操作员。

我理解你的真正意思(用值填充结构的成员,而不是用结构填充分配的内存),但这不能像上面所说的那样工作,ptr它不是一个合适的指针,.也不用于访问元素通过指向结构对象的指针。而是->用于此。

旁注:

  1. ptr始终通过检查来证明内存分配是否成功NULL
  2. 我使用malloc(sizeof(*ptr));它是因为它确保分配的大小适合ptr所指向的对象。

解决方案如下:

文件1.h:

typedef struct s1{
   int a;
   double b;
   char c;
} THING;

文件2.c

#include <stdlib.h>
#include <stdio.h>
#include "File1.h"     // Note File1.h must be in the same directory as File2.c

int main(void)
{
   THING *ptr = malloc(sizeof(*ptr));
   if(ptr == NULL)
   {
       fprintf(stderr,"Memory could not be allocated!");
       return 1;
   }

   ptr->a = 10;
   ptr->b = 25.4;
   ptr->c = 'A';

   printf("a = %d\n", ptr->a);
   printf("b = %.2f\n", ptr->b);
   printf("c = %c", ptr->c);

   return 0;   
}

输出:

a = 10
b = 25.40
c = A

推荐阅读