无法通过引用将结构传递给函数

时间:2019-05-21 11:54:17

标签: c

我正在C语言中创建一个非常简单的字典结构,因此无法通过引用将其正确传递给dictAdd函数。函数内部出现问题,结构值损坏。请参见下面的屏幕截图。当我进入第18行时,一切都很好,但是当我进入函数的第19行时,结构字段将显示不适当的值。

第18行

Line 18

第19行

Line 19

Dictionary.h

typedef struct DictionaryStruct
{
    int *arr;
    int arrLen;
} Dictionary;

Dictionary *dictCreate(int arrLen);
int dictAdd(Dictionary *dict, char *key, char *val);

Dictionary.c

#include "Utils.h"
#include "Dictionary.h"

Dictionary *dictCreate(int arrLen)
{
    int *arr = createIntArray(arrLen);
    for (int i = 0; i < arrLen; ++i)
    {
        arr[i] = '\0';
    }

    Dictionary dict;
    dict.arr = arr;
    dict.arrLen = arrLen;
    return &dict;
}

int dictAdd(Dictionary *dict, char *key, char *val) {
    int hash = getHash(key, dict->arrLen);
    dict->arr[hash] = val;
}

Main.c

#include <stdio.h>
#include <stdlib.h>
#include "Utils.h"
#include "Dictionary.h"

int main() {
    Dictionary *dictPtr = dictCreate(5);
    dictAdd(dictPtr, "key1", "Hello");
    char *value1 = dictGet(dictPtr, "key1");
    printf("%s", value1);

    printf("Press any key to exit\n");
    getchar();
}

1 个答案:

答案 0 :(得分:3)

您正在返回指向本地的指针。在目标生命周期结束后取消对指针的引用是未定义行为

您的dictCreate也应该堆分配Dictionary结构(除了堆分配int数组之外)。