我已经检查了其他类似问题的问题,但没有一个解决方案适合我的情况。
手头的问题是,我正在尝试使用这个结构创建一个带有动态内存的堆栈:
struct stekas{
int content;
struct stekas *link;
} *top = NULL;
但是,我在一些函数中遇到了麻烦:具体来说,“取消引用指向不完整类型的指针”。这是错误的代码片段:
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]);
我假设它与指针没有连接到内容有关。我已经检查了其他问题,他们似乎有结构本身的问题,但我个人认为没有任何问题。
答案 0 :(得分:2)
似乎这些代码段中使用的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
既不是指针也不是数组。所以你可能不会应用下标运算符。
答案 1 :(得分:1)
我在这里看到的问题是
var xx=[];
xx['1'] ={'a':'bb','c':'dd'}
debugger;
document.log(xx);
未定义使用的范围。也许struct node
可能是struct node
。
struct stekas
printf("%d\n", temp->content[i]);
不是可以取消引用的数组或指针。
那就是说,
content
之前将free()
分配的内存设置为temp
,以避免内存泄漏。 另外,请temp = top;
malloc()
和C
中的家人返回do not cast。
答案 2 :(得分:0)
temp = top;
top
为空,您将temp
指向null并取消引用它,这将导致未定义的行为。
你malloc()
会给你一些你可以访问的记忆,所以请使用它。