“从不兼容的指针类型返回” [默认为启用]。

请您能解释一下为什么会发生这种情况以及我该如何解决?

该代码既具有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];


另一方面,如果您需要动态创建数据包,最好的方法是使用链表。但是在那种情况下,您必须相应地更改addpacketlistpackets函数。

如果您不了解链接列表,请开始阅读它们。

关于c - 我的主要功能中有关于参数,强制转换和指针的三个警告,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20544853/

10-12 16:27