作为赋值的左操作数需要左值?

时间:2016-10-20 02:49:30

标签: c arrays pointers dynamic-memory-allocation

这是我的代码:

void pwd(Fs_sim *files) {
    Node *curr_node = files->curr;
    Node **space = NULL;
    int i = 0;

    while (curr_node->parent != NULL) {
        space = realloc(space, sizeof(Node *) * (i + 1));
        *space + i = curr_node;
        i++;
        curr_node = curr_node->parent;
    }
    if (i == 0)
        printf("/\n");
    else {
        while (i > 0) {
            printf("/%s", (*space + i--)->name);
        }

        printf("\n");
    }
    free(space);

}

'space'是指向动态分配的数组的指针。当每个节点被迭代通过时,我想在动态分配的数组中存储一个指向该节点的指针,并保持有多少元素的计数。我收到错误消息:

error: lvalue required as left operand of an assignment

在'* space + i = curr_node;'线。

我不明白它有什么问题。有人可以澄清吗?

更新

我已经更改了代码并且现在编译了,但是当我运行可执行文件时,我得到分段错误。这是我的代码:

void pwd(Fs_sim *files) {
    Node *curr_node = files->curr;
    Node **space = NULL;
    int i = 0;

    while (curr_node->parent != NULL) {
        space = realloc(space, sizeof(Node *) * (i + 1));
        *(space + i) = curr_node;
        i++;
        curr_node = curr_node->parent;
    }
    if (i == 0)
        printf("/\n");
    else {
        while (i >= 0) {
          printf("/%s", (*(space + (i-1)))->name);
          i--;
        }

        printf("\n");
    }
    free(space);

}

仍然无法找到它的错误。

提前谢谢。这里的大菜是C。

2 个答案:

答案 0 :(得分:1)

更新前答案:

你似乎已将其翻过来,它应该是curr_node = *space + i。这是因为你想要分配的表达式值的变量应该在左边,因为你不能将curr_node分配给两个变量之和

这不适合您的目的,您也可以*(space + i) = curr_node

答案 1 :(得分:1)

我认为错误就在这里:

while (i >= 0) {
    printf("/%s", (*(space + (i-1)))->name);
    i--;
}

i为0并且您尝试执行(*(space + (i-1)))->name);时会发生什么?

你得到space + -1