小编THV*_*THV的帖子

如何避免错误地将空格*转换为错误的类型?

用C编程,是否有任何技术可以用来避免(或至少最小化)错误地将错误指针类型转换为错误的指针类型的可能性?我正在开发一个解析几种不同类型的CSV数据文件的程序,并将这些字段存储到特定的数据结构中进行处理.例如,其中一个数据文件的记录存储在哈希表中; 来自另一个文件的数据存储在有向图中.

我想创建一个主要的解析函数,它从文件中读取字段记录,并将每个记录传递给一个标记字段并将它们存储在适当数据类型中的函数.我没有为每个文件类型创建单独的解析/标记化函数,而是想创建一个通用函数来执行此操作.在我的设计中,调用函数将传递字段记录,指向适用于数据文件的tokenizer的函数指针,以及指向适用于数据文件的目标数据结构的节点的void*.

我想知道的是,是否有任何方法可以确保用户不会错误地使用不匹配的标记器/数据结构调用解析函数.(通过使用指向void的指针,编译器在这里肯定无能为力.)或者,如果没有这样的技术,是否有任何有效的异常处理方法来捕获此错误并防止出现重大问题(例如,sigfaults)?

我希望代码尽可能便携.

有什么想法吗?我没有嫁给这个算法,如果有人有更好的想法我会对它开放.

c pointers void

4
推荐指数
1
解决办法
313
查看次数

访问动态分配数组的越界元素/无 SegFault

我正在用 C 语言开发一个程序,它使用链表数组(原始哈希表)作为数据类型来表示某些日期信息。该数组有十二个元素对应于一年中的几个月,每个月都有一个包含数据节点的链表。

我开发了使用这种数据类型的模块,它运行良好。后来我发现我正在访问越界的数组元素(例如通过索引 12 而不是 11 访问第 12 个元素)。但该程序始终如一地运行,没有发生任何事故。我从未收到过分段错误。我已经纠正了编码错误。有人能解释为什么访问越界元素不会导致段错误吗?

这已经不是第一次发生了。我创建了一个动态分配的多维数组,为了测试,我尝试访问越界元素。该程序运行良好,产生了准确的结果,并且在大多数情况下不会出现段错误。我唯一一次实现了,我不得不尝试访问实质上越界的元素。

(这些程序目前是用于测试的 Windows 控制台应用程序。我正在使用 MinGW 进行编译。如果有帮助,我可以包含代码。)

c memory-management dynamic-memory-allocation

1
推荐指数
1
解决办法
1781
查看次数