使用结构将内存分配给结构

时间:2014-05-05 07:58:42

标签: c struct linked-list

假设我有以下代码:

typedef struct _SingleList {
    struct _SingleList *link;
    int data;
} SingleList;


SingleList *prepend(SingleList *list, int data) {
    SingleList a;
    SingleList *newNode = &a; // Note, here I assign memory using structure not malloc.
    newNode->data = data;
    newNode->link = list;
    return newNode;
}

因为,你可以在上面的prepend函数中看到,我使用a而不是malloc的地址分配内存,当我调用prepend函数时,它工作正常。这是一个示例:

int main(void) {
    SingleList *list = NULL;
    list = prepend(list, 10);
    printf("%d", list->data);

    list = prepend(list, 20);
    printf("\n%d", list->link->data);

    list = prepend(list, 30);
    printf("\n%d", list->link->link->data);

}

那么,它是如何工作的以及它是否也适用于其他人,那么为什么我们将malloc()用于链表而不是简单地分配结构。

2 个答案:

答案 0 :(得分:3)

在函数prepend中,返回值newNode是指向局部变量a的指针。当函数结束时,它将访问它的未定义行为。只需发生就可以通过这个简单的代码在您的机器中工作,您无法依赖它。

答案 1 :(得分:2)

它不起作用。如果它显示正确的值,则它是纯粹的巧合,并且内存不会被其他人或其他人覆盖。当prepend()函数退出时,将释放为a结构分配的内存。该结构的内存仅在本地环境中可用。