从函数写入时链表状态不变

linked list state unchanged when writing to it from a function

我在使用一个非常简单的函数时遇到了问题,我必须创建一个链表,每个节点都存储一个字符串中的一个字符,我为此创建了一个函数,但是它似乎什么也没做全部

这就是我正在谈论的函数(变量名称是西班牙语,对此我很抱歉):

struct listaDoble crearMiADN()
{
    char miDni[] = "1234";
    struct listaDoble listado = crearLista(strlen(miDni));
    struct nodo *actual = listado.first;
    for(int i = 0; i<strlen(miDni); i++)
    {
        if(miDni[i] != '[=10=]' && miDni[i] != EOF)
        {
            actual->tuNombre[0] = miDni[i];
            actual->tuNombre[1] = '[=10=]';
            actual = actual->next;
        }
    }
    return listado;

}

这是有效的函数 crearLista,但您可能需要它来理解我的代码:

struct listaDoble crearLista(int num_nodos)
{
    struct listaDoble *result = (struct listaDoble *)malloc(sizeof(struct listaDoble));
    if(num_nodos > 0)
    {
        result->first = (struct nodo *)malloc(sizeof(struct nodo));
        result->first->prev = NULL;
        struct nodo *actual = result->first;
        struct nodo *prev = NULL;
        struct nodo *last;
        for(int i = 0; i < num_nodos; i++)
        {
            if(i + 1 != num_nodos)
            {
                actual->next = (struct nodo*)(malloc)(sizeof(struct nodo));
                actual->prev = prev;
                actual = actual->next;
                prev = actual;
            }
            else
            {
                actual->next = NULL;
                actual->prev = prev;
                last = actual;
            }
        }
        result->last = last;
        result->size = num_nodos;
    }
    else
    {
        result->first = NULL;
        result->last = NULL;
        result->size = 0;
    }
    return *result;

}

在评论中要求

struct listaDoble
{
    struct nodo *first, *last;
    int size;
};

现在这就是我对 crearMiADN 事物的称呼

struct listaDoble dni = crearMiADN();

现在预期的结果是这样的

NULL<-- [1] <-> [2] <-> [3] <-> [4] --> NULL

然而这就是我得到的

NULL<-- [] <-> [] <-> [] <-> [] --> NULL

我不太喜欢指针,我修复它的尝试实际上是在某个地方放一个 * 看看它是否有效(剧透警报,它没有)

像这样

struct listaDoble dni = *crearMiADN(); //type mismatch

然后我尝试修复我这样做的类型不匹配

struct listaDoble crearMiADN()
    //...//
    return *listado;

}

这又一次出错了,现在我几乎无法尝试将 * 随机放在某个地方并检查它是否编译和工作

您正在尝试 return 局部变量。您应该分配该内存块和 return 指针。请按如下方式更正代码,然后重试。

struct listaDoble* crearMiADN()
{
    char miDni[] = "1234";
    struct listaDoble *listado = crearLista(strlen(miDni));
    ...
    return listado;

}
struct listaDoble* crearLista(int num_nodos)
{
    struct listaDoble *result = (struct listaDoble *)malloc(sizeof(struct listaDoble));
    ...
    return result;
}