解除对结构成员

时间:2015-05-15 07:58:14

标签: c arrays struct compiler-errors dynamic-memory-allocation

我已经检查了其他类似问题的问题,但没有一个解决方案适合我的情况。

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

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]);

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

3 个答案:

答案 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)

我在这里看到的问题是

  1. var xx=[]; xx['1'] ={'a':'bb','c':'dd'} debugger; document.log(xx); 未定义使用的范围。也许struct node可能是struct node

  2. struct stekas

    printf("%d\n", temp->content[i]);不是可以取消引用的数组指针

  3. 那就是说,

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

    另外,请temp = top; malloc()C中的家人返回do not cast

答案 2 :(得分:0)

temp = top;

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

malloc()会给你一些你可以访问的记忆,所以请使用它。