“从不兼容的指针类型返回” [默认为启用]。
请您能解释一下为什么会发生这种情况以及我该如何解决?
该代码既具有main函数又具有addpackets函数,这是仅有的两个有问题的函数,其全部是因为试图使该代码与malloc一起使用以使用动态内存。
最佳答案
我认为您的最后警告来自addpacket()
函数。addpacket()
函数将整数指针int*
作为第一个参数,而您正在传递int
。
您需要按以下方式调用addpacket
:
info = addpacket(&records, info);
但是在addpacket函数中,您将返回一个整数,因此请将函数的返回类型更改为int
所以改变
struct packets* addpacket(int *recCount, struct packets *info)
至
int addpacket(int *recCount, struct packets *info)
您的
addpacket
函数中也存在错误在执行
records++
时,请记住记录是一个指针,而不是整数,因此必须在运算符(即*records++
)上使用值另外,您应该返回
*records
解决所有错误的最简单方法是执行以下操作:
将addpacket更改为如下:
int addpacket(int recCount, struct packets *info)
并称它为
records = addpacket(records, info);
以这种方式不需要其他更改。
您有很多要学习的指针。当我在此处发布代码时,请与您的代码进行比较,并尝试找出差异及其原因。
崩溃的原因是,您仅使用
info
创建一个名为malloc
的数据包,而每次添加数据包都只是覆盖它。但是,当您显示或保存时,您尝试访问的是从未分配过的内存,例如info[i]
。您的代码中仅存在info[0]
,那么您从何处获得数组?要解决此问题,您可以省略
malloc
并使用静态数组,例如struct packets info[MAX_COUNT];
另一方面,如果您需要动态创建数据包,最好的方法是使用链表。但是在那种情况下,您必须相应地更改
addpacket
和listpackets
函数。如果您不了解链接列表,请开始阅读它们。
关于c - 我的主要功能中有关于参数,强制转换和指针的三个警告,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20544853/