【发布时间】:2020-03-09 23:15:05
【问题描述】:
我已经看到了很多其他问题,但是我似乎仍然无法弄清楚如何初始化指向同时也是指针的结构成员的指针。鉴于我指向我的结构的指针(其中包含一个作为指针的成员),我想初始化一个指向该成员指针的指针。
例如,将节点添加到链表时,我所学的示例中给出的参数是 addNode(**head, etc)。我想知道我是否需要为这个指针分配内存以及如果我在下面的代码中做错了如何初始化它。
int row, col;
double val;
char nwln;
sp_tuples_node ** tuplepointer/* = malloc(sizeof(sp_tuples_node *));*/
FILE * inFile = fopen(input_file, "r");
sp_tuples * new_tuples = malloc(sizeof(sp_tuples));
tuplepointer = new_tuples->tuples_head;
fscanf(inFile, "%d %d%c", &row, &col, &nwln);
//while not eof
fscanf(inFile, "%d %d %d%c", &row, &col, &val, &nwln);
addNode(tuplepointer, row, col, val);
return new_tuples;
有问题的行由新行分隔,其余未完成的代码用于调用函数的上下文,应忽略其功能。
感谢您提供有关如何将指针分配给指针成员的任何反馈。
【问题讨论】:
-
什么是
sp_tuples_node?这听起来像是typedef指向结构的匈牙利符号。我认为在同一个声明 (sp_tuples_node** tuplepointer) 中混合 typedef 和多个指针不是一个好主意,因为目前还不清楚指针间接发生了多少。 -
我看到大量无效内存的立即使用(
malloc在分配后不会将内存归零,而calloc会),例如tuplepointer = new_tuples->tuples_head在new_tuples = malloc(sizeof(sp_tuples))之后 -你不应该这样做,智能编译器会给你一个警告。 -
我尝试寻找有关家庭作业样式格式的标签,但是我找不到一个这不是硬件的答案(只是为了澄清我不是想得到答案)。我无法更改愚蠢的符号(我同意它真的很难阅读)。感谢您指出我的错误,但我会将其添加到我的修复中。对于指向结构中成员的指针,我应该为整个单独的类型分配内存
(ex: tuplepointer = calloc(sizeof(tuple_node_struct) -
或者我应该初始化一个像
(tuple_node_struct ** tuplepointer;)tuplepointer = new_tuples->tuples_head这样的指针
标签: c pointers dynamic-memory-allocation