c - 真的迷失了如何在 C 中填充分配的内存
问题描述
所以对于我正在做的一个项目,我有两个文件。在第一个文件中,我有一个 typedef 结构,它是一个头文件。在第二个中,我使用 malloc() 分配内存,然后我尝试使用我在第一个文件中使用“。”的结构填充分配的内存。操作员。
不知道该怎么做...
文件 1 如下所示:
typedef struct
{
/* members */
}THING;
文件 2 看起来像这样(不是主要的):
int *ptr;
ptr = malloc(sizeof(THING)); //allocates memory for THING
解决方案
int *ptr;
ptr = malloc(sizeof(THING));
ptr
是一个指向int
但不合适的指针,因为你想指向结构THING
。
需要将指针定义为指向THING
->的指针THING *ptr
。
然后我试图用我在第一个文件中使用“。”的结构填充分配的内存。操作员。
我理解你的真正意思(用值填充结构的成员,而不是用结构填充分配的内存),但这不能像上面所说的那样工作,ptr
它不是一个合适的指针,.
也不用于访问元素通过指向结构对象的指针。而是->
用于此。
旁注:
ptr
始终通过检查来证明内存分配是否成功NULL
。- 我使用
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
推荐阅读
- javascript - 用逗号分隔的邮件 - 添加邮件长度检查(JS 正则表达式)
- javascript - JavaScript map 函数替换对象
- tomcat - 如何配置 Tomcat HAProxy 从 localhost:8080/path 转发到 1.2.3.4:8080/path?
- javascript - 使用 Cypress 和/或 mocha(或 mocha-chai)检查不包含单词但不包含子字符串
- aix - AIX 上的 cltopinfo 命令输出
- python-3.x - 尽管在 scrapy 框架中传递了正确的路径值,但 response.xpath 或 response.css 没有返回任何结果
- html - 在streamlit中创建从本地系统打开文件的链接
- typescript - 如何通过 cypress-grep 重复运行/刻录场景(用黄瓜编写)特定次数?
- r - Logistic回归模型的秩
- typescript - 升级软件包后的 Firebase 类型错误