取消引用指向结构成员的不完整类型错误的指针

Dereferencing pointer to incomplete type error for a structure member

我检查了其他有类似问题的问题,但 none 的解决方案适用于我的情况。

手头的问题是,我正在尝试使用此结构创建一个具有动态内存的堆栈:

struct stekas{
    int content;
    struct stekas *link;
} *top = NULL;

但是,我 运行 在我的一些功能上遇到了麻烦:具体来说,"Dereferencing pointer to incomplete type"。这是错误的代码片段:

struct node *temp;
temp = (struct stekas*)malloc(sizeof(struct stekas));
/* some code */
temp = top;
printf("Popped out number: %d\n", temp->content);
top = top->link;
free(temp);

这是出现错误的另一个函数:

int i;
struct node *temp;
/* some code */
for (i = top; i >= 0; i--) {
printf("%d\n", temp->content[i]);

我假设它与未连接到内容的指针有关。我检查了其他问题,他们似乎对结构本身有问题,但我个人认为这个问题没有任何问题。

我在这里看到的问题是

  1. struct node没有定义是它使用的范围。也许 struct nodestruct stekas.

  2. printf("%d\n", temp->content[i]);

    content 不是可以取消引用的 arraypointer

也就是说,

  • 通常在取消引用指针之前检查 NULL 是个好习惯。
  • 确保你的 free()temp = top; 之前将分配的内存分配给 temp,以避免内存泄漏。

此外,请 do not cast malloc() 的 return 值和 C 中的家人。

temp = top;

top 为 null,您正在使 temp 指向 null 并取消引用它,这将导致未定义的行为。

malloc() 会给你内存,你可以使用它。

似乎这些代码片段中使用的struct node

struct node *temp;
temp = (struct stekas*)malloc(sizeof(struct stekas));
/* some code */
temp = top;
printf("Popped out number: %d\n", temp->content);
top = top->link;
free(temp);

int i;
struct node *temp;
/* some code */
for (i = top; i >= 0; i--) {
printf("%d\n", temp->content[i]);

未定义。

我想你的意思是struct stekas

此外,这两个代码片段还有其他严重错误。例如,您分配了内存并将其地址分配给指针 temp

temp = (struct stekas*)malloc(sizeof(struct stekas));
/* some code */

然后覆盖指针。所以分配内存的地址丢失了。

temp = top;

所以有内存泄漏。

或者在这个语句中

for (i = top; i >= 0; i--) {

变量 i 的类型是 int 而 top 是一个指针。所以这个赋值 i = top 和这个递减的 i-- 没有意义。

关于 printf 语句中使用的表达式 temp->content[i]

printf("%d\n", temp->content[i]);

content 既不是指针也不是数组。所以你可以不应用下标运算符。