【发布时间】:2012-03-13 07:27:05
【问题描述】:
我试图为结构指针分配存储空间。这是缩写代码 - 你能告诉我我做错了什么吗?
可以.h
#ifndef CAN_H_
#define CAN_H_
typedef struct {
u32 id;
u32 mask;
char length;
char data[8];
char status;
} CAN_PACKET;
项目.c
#include "can.h"
CAN_PACKET *packet_Tx, *packet_Rx;
CAN_PACKET packet1, packet2;
packet_Tx = (CAN_PACKET*)malloc(sizeof(CAN_PACKET)); /* line 20 in text */
packet_Tx = &packet1;
packet_Rx = &packet2;
int main(void)
{
while(1)
{
}
}
我收到以下错误/警告:
警告 1 数据定义没有类型或存储类 c:\users\blu\documents\avrstudio\Can5\Can5\Can5.c 20 2 Can5
'packet_Tx' c:\users\blu\documents\avrstudio\Can5\Can5\Can5.c 20 2 Can5 声明中的警告 2 类型默认为 'int'
“packet_Tx”c:\users\blu\documents\avrstudio\Can5\Can5\Can5.c 20 2 Can5 的错误 3 冲突类型
错误 4 先前声明 'packet_Tx' 在这里 c:\users\blu\documents\avrstudio\Can5\Can5\Can5.c 18 13 Can5
警告 5 初始化从没有强制转换的指针中生成整数 c:\users\blu\documents\avrstudio\Can5\Can5\Can5.c 20 14 Can5
当 packet_Tx 分配行被注释掉时,其余代码可以正常运行。非常感谢各位。
【问题讨论】:
-
什么不起作用?你怎么知道?你后来对 packet_pt 做了什么?
-
你的例子是 100% 正确的,所以“没用”有点含糊……不过,请不要在 C 中对
malloc()调用的返回值进行类型转换。跨度> -
编译器不断抱怨“packet_pt”的冲突类型。如果我注释掉 packet_pt 分配行,则代码无误。这就是为什么我有点困惑。
-
您不会“为指针分配存储空间”。相反,您分配存储空间,并且您有一个指向该存储空间的指针。指针本身已经存储在某个地方。
-
下面我显示来自编译器的错误消息...警告1:数据定义没有类型或存储类.....警告2:类型默认为'packet_pt声明中的'int' '... 错误 3:'packet_pt' 的类型冲突.... 错误 4 先前声明的 'packet_pt' 在这里.... 警告 5:初始化从没有强制转换的指针生成整数.... 错误 6:初始化器element is not constant......上面所有的cmets都引用了第一个赋值语句,除了注释4引用指针声明语句..我很困惑。
标签: c pointers struct malloc typedef