【发布时间】:2020-07-28 14:09:01
【问题描述】:
我正在尝试制作一个小型文本编辑器并且高效(空间/时间方面)。我还想保存对文本的更改;我会将更改和正文保存在两个列表中,两个列表都由这样的节点组成:
struct node{
int startingLine;
int endingLine;
char *line;
char *newLine;
};
我的想法是将此结构用于 text 列表和 changes 列表;@987654322 @ 和 newLine 指向 char 数组(文本行)
当这些是 text 节点时,newLine 数组为空或指向 null,并且当行发生更改时,此节点只是移动到 更改列表,newLine 数组被替换为文本中第一行的新行填充;
这样我就不必free text 列表中的节点和malloc 更改中的另一个节点 列出并复制所有信息;但是:
-
当我尝试将数组设置为
NULL时,我得到一个错误;我想知道为什么,我认为数组名称只是指针? -
另外,要使用我只知道
malloc(sizeof(struct node))的堆,它是否也为第二个指针分配空间,即使我不立即需要它?
所以最后我问这是否是一个好主意或如何解决它或者是否可以以某种方式完善它;也许在分配节点后我应该立即将newLine 设置为NULL? NULL 指针根本不占用内存,或者与不在结构中放置任何指针相比仍然占用一些内存?因为据说这个想法是让 text 列表由节点组成,但所有“无用的”newLine 指针都挂在那里。
【问题讨论】:
-
数组和指针完全不同
-
数组是一块内存。
malloc(sizeof(struct node)), does it allocate space for the second pointer你是什么malloc ...即使答案很可能是no。A NULL pointer occupies no memory除非它保存在内存中占用指针大小(通常为 32 或 64 位),否则您可能会混淆指针及其指向的内容 -
不,
malloc只为struct及其包含的指针成员分配内存——而不是它们可能指向的内容,因为malloc无法知道这一点。在您设置它们之前,这些指针值将是不确定的。 -
所有
char *值的大小相同。不要混淆指针的大小和它所指向的事物的大小。 -
数组名称在某种意义上“像指针”,但它们是常量。分配
array = NULL就像分配5 = 0。
标签: c pointers memory-management struct null