【发布时间】:2020-12-31 08:04:19
【问题描述】:
我正在使用指向结构的指针,并进行了以下设置。
/* Initialized. */
struct base { ... };
struct base **db;
db = malloc( base_max * sizeof *db );
/* When a new struct base is required. */
db[ i ] = malloc( sizeof( struct base ) );
现在,如果可能,虽然不是很重要,但我只希望db[0] 指向不同的结构struct mem { ... }。这可能吗?正确的方法是什么?
我想我可以设置db[0] = malloc( sizeof( struct mem ) );但是db 已经被声明为指向一个指向struct base 的指针;而db的内存分配也是基于此。
我很困惑,因为我读到的指针必须有类型,否则指针算术将无法正常工作;但我也读到你不必从 malloc 转换指针,即使它返回 void 指针。
关于重复的问题,尽管它讨论了 void 类型,但它并没有回答我关于如何完成此操作或其风险的问题。 @4386427 的评论似乎指向要考虑的真正问题,该问题未在其他问题或对此问题的一个答案中解决。谢谢。
【问题讨论】:
-
db[0] = malloc( sizeof( struct mem));没有错,是合法的.... 是否会遇到问题,取决于您以后如何使用db[0]。由于您没有发布该代码,我们无法判断 -
我相信这个问题隐含地讨论了指向 void 的指针。如果您不同意,请告诉我,但基于该假设,我建议重复以下内容:
-
你也可以使用这两种类型的并集
-
@4386427 谢谢,这是最有意义的。
db[i>0]是一组指向 sqlite 数据库的指针,一组准备好的语句,一个目录路径的 char 数组,然后是一个常规的 int(无指针)。db[0]是内存数据库,准备好的语句较少,没有路径。最好将db[0]单独保留在指针数组之外,并避免在其他地方出现意外错误的风险。出于好奇,db[0] + sizeof(struct mem)会指向db[1],db[1] + sizeof(struct base)会指向db[2],就像字符数组一样?谢谢。