error: invalid application of ‘sizeof’ to incomplete type ‘struct LcdDevice’ struct LcdDevice* lcd = malloc(sizeof(struct LcdDevice)); ^~~~~~
时间: 2024-02-14 17:07:57 浏览: 144
这个错误通常出现在您在使用`malloc`时,申请了一个不完整的结构体类型的内存空间。例如:
```c
struct LcdDevice; // 不完整的结构体声明
void init_lcd() {
struct LcdDevice* lcd = malloc(sizeof(struct LcdDevice)); // 错误的使用
// 其他代码
}
```
这里的`struct LcdDevice`是一个不完整的结构体声明,没有定义完整的结构体类型。在这种情况下,编译器无法确定结构体类型的大小,因此`sizeof(struct LcdDevice)`就会出现错误。
要解决这个错误,您需要在声明结构体时提供完整的结构体定义,例如:
```c
struct LcdDevice {
// 结构体成员
};
void init_lcd() {
struct LcdDevice* lcd = malloc(sizeof(struct LcdDevice)); // 正确的使用
// 其他代码
}
```
这里的`struct LcdDevice`提供了完整的结构体定义,编译器就可以计算出该结构体的大小了。
相关问题
invalid use of incomplete type 'struct Ui::Dialog'
This error message indicates that the code is trying to use a struct that has not been fully defined or declared. It can occur when the struct definition is missing or not properly included in the code. To fix this error, make sure that the struct definition is complete and is included in the file where it is being used.
在写G.vexs[i] = (VerTexType*)malloc(sizeof(VerTexType));时发生[Error] invalid conversion from 'VerTexType* {aka char*}' to 'VerTexType {aka char}' [-fpermissive]
这个错误通常发生在将指针类型转换为非指针类型时,或者将不同类型的指针进行转换时。在你的代码中,可能是在将VerTexType指针转换为VerTexType类型时出现了这个问题。
你需要将代码改成下面这样:
```c
G.vexs[i] = (VerTexType)malloc(sizeof(struct VerTexType));
```
这样就可以将指向VerTexType类型的指针转换为VerTexType类型了。需要注意的是,使用malloc分配的空间需要手动释放,否则会导致内存泄漏。在程序结束时,需要使用free函数释放G.vexs中所有元素所分配的空间。例如:
```c
for (int i = 0; i < G.vexnum; i++) {
free(G.vexs[i]);
}
```
这样就可以释放所有顶点所占用的空间了。
阅读全文