我正在C语言中创建一个非常简单的字典结构,因此无法通过引用将其正确传递给dictAdd
函数。函数内部出现问题,结构值损坏。请参见下面的屏幕截图。当我进入第18行时,一切都很好,但是当我进入函数的第19行时,结构字段将显示不适当的值。
第18行
第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();
}
答案 0 :(得分:3)
您正在返回指向本地的指针。在目标生命周期结束后取消对指针的引用是未定义行为。
您的dictCreate
也应该堆分配Dictionary
结构(除了堆分配int
数组之外)。