【发布时间】:2020-05-11 14:12:31
【问题描述】:
我正在为具有不可靠的动态内存分配函数(malloc、calloc、realloc 等)的旧系统进行一些编程。
我开始考虑在不使用任何这些功能的情况下加载文件的想法。指定一个带有内存地址的指针,我将在该内存地址上加载文件内容,当我遍历文件将我需要的内容复制到我的结构变量或将我的内部结构的指针分配给这个新地址时,这个指针会增加。任何新文件都将加载到前一个文件的结束地址。
对于像这样的简单结构:
typedef struct A
{
int a;
int b;
int c;
}A;
A a;
我用一个简单的memcpy复制内容然后增加指针
memcpy(&a, pointer_to_the_file, sizeof(A));
pointer_to_the_file += sizeof(A)
这很好用。对于之前我会使用一些动态分配的结构,例如:
typedef struct B
{
A* p_a;
A* p_b;
}B;
B b;
我直接分配指针:
b->p_a = (B *)pointer_to_the_file;
//then increase the pointer
pointer_to_the_file += sizeof(B) * num_of_p_a_elements;
这似乎也可以正常工作。 但是当我转向更复杂的结构时,我开始遇到一些问题:
typedef struct C
{
A p_a_1;
A* p_a_2;
B** p_b;
}C;
C *p_c;
这里我不知道如何正确处理它。我做到了:
p_c = (C *)pointer_to_the_file;
但我没有得到 p_a_1 的预期结果,虽然 p_c 的地址指向正确的位置,其中 p_a_1 的值正确强> 位于。我尝试使用 C p_c[0]; 然后 p_a_1 的值是正确的,但我不知道为什么会这样,所以我不想构建它在此基础上,然后在以后发现它会导致问题。 另外,我无法理解如何使用 [0] 技巧分配 p_c->p_b (非方形 2d 矩阵)。
这是否可能(从文件中读取这样的结构而不使用动态内存分配函数)?如果是这样,最好的方法是什么?
【问题讨论】:
-
嗯...在文件中存储指针有什么意义?
-
C->p_c是否正确?你的结构C没有声明成员名称p_c -
@Ackdari 我在文本中打错字了(本来应该是 p_c)
-
如果您理解正确,您希望加载一个文件,然后将其内容解析为您的结构
C,而不使用动态内存,对吗? -
是的,如果可能的话