取消引用指向结构成员的不完整类型错误的指针
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]);
我假设它与未连接到内容的指针有关。我检查了其他问题,他们似乎对结构本身有问题,但我个人认为这个问题没有任何问题。
我在这里看到的问题是
struct node
没有定义是它使用的范围。也许 struct node
是 struct stekas
.
printf("%d\n", temp->content[i]);
content
不是可以取消引用的 array 或 pointer。
也就是说,
- 通常在取消引用指针之前检查 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
既不是指针也不是数组。所以你可以不应用下标运算符。
我检查了其他有类似问题的问题,但 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]);
我假设它与未连接到内容的指针有关。我检查了其他问题,他们似乎对结构本身有问题,但我个人认为这个问题没有任何问题。
我在这里看到的问题是
struct node
没有定义是它使用的范围。也许struct node
是struct stekas
.printf("%d\n", temp->content[i]);
content
不是可以取消引用的 array 或 pointer。
也就是说,
- 通常在取消引用指针之前检查 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
既不是指针也不是数组。所以你可以不应用下标运算符。