【发布时间】:2014-09-17 22:53:35
【问题描述】:
我对 C 的分配有一些疑问。
#include <stdlib.h>
typedef struct MyStruct {
char CharsInMyStruct[50];
} MyStruct;
int main(void) {
struct MyStruct * s;
s = malloc(100 * sizeof *s);
}
有人告诉我分配是“智能”的,因为在我使用内存之前,空间并不是“真正”(物理)分配的。内存是在我使用 MyStruct 的第一个元素时物理分配的,还是在我使用每个元素时分配的?
我认为如果我需要动态读取文件并复制动态结构中的每一行,我可以分配 100 个元素,然后在读取文件后重新分配正确的维度,所以我不必阅读两次以预先知道要为每行分配多少或重新分配多少。这可能/允许吗?这是一个好的解决方案吗?
编辑:对不起,我太关心理论了,我忘了添加一个像样的代码。也许这个问题还不够清楚,但我不需要知道如何编写我在想的东西;我只需要知道内存是如何分配的。
【问题讨论】:
-
您的代码甚至不应该编译。你应该告诉我们
MyStruct是什么。并且可能在malloc调用中使用sizeof(MyStruct)。 向我们展示您的实际代码;一般来说C或者它的分配并不聪明。 -
您的代码 sn-p 很奇怪(无法编译,不清楚它真正应该做什么)。这无助于使您的问题更清楚,而是相反。您应该解释一下代码 sn-p 应该说明什么/...,目前它主要是令人困惑的。
-
我没有发布代码,因为我认为其余代码(读取函数、realloc 函数、结构中元素的副本等)与问题无关。我想知道内存分配在较低级别是如何工作的,我对代码本身没有问题!
-
struct MyStruct *var; var = malloc(sizeof(struct MyStruct) * 100);