我正在为我编写的编译器创建符号表,并且当我尝试添加到符号表时,我不断收到valgrind错误。当我把我的功能,我打电话给我的附加功能Valgrind使用单位化值
stAdd (&sSymbolTable, "test", RSRVWRD, 4, 9);
,并在我的stAdd功能它是目前
void stAdd (StPtr psSymbolTable, char *identifier, SymbolTableType type,
int addressField, int arrayDimensions)
{
int hashValue;
hashValue = hash (identifier, psSymbolTable->numBuckets);
if (psSymbolTable->spSymbolTable[hashValue] == NULL)
{
psSymbolTable->spSymbolTable[hashValue] = (StEntryPtr) malloc (sizeof(StEntry));
strcpy (psSymbolTable->spSymbolTable[hashValue]->identifier, identifier);
psSymbolTable->spSymbolTable[hashValue]->entryLevel = psSymbolTable->currentLevel;
psSymbolTable->spSymbolTable[hashValue]->type = type;
psSymbolTable->spSymbolTable[hashValue]->addressField = addressField;
psSymbolTable->spSymbolTable[hashValue]->arrayDimensions = arrayDimensions;
psSymbolTable->spSymbolTable[hashValue]->psNext = NULL;
}
}
但每次我我StEntry struckt内设定值时,我得到一个错误
使用尺寸8
每一个的unitialised价值我在if语句中设置了一些东西。有没有看到我要去哪里错了?
我StEntry是
typedef struct StEntry
{
char identifier[32];
SymbolTableLevel entryLevel;
SymbolTableType type;
int addressField;
int arrayDimensions;
StEntryPtr psNext;
} StEntry;
'valgrind'不会给你行号吗?如果你使用'-g'编译代码(如果你没有这样做,那么你应该很好,因为如果它不能告诉你这条线,你就会抛弃很多'valgrind'的用处号)。它指向哪条线?什么是完整的信息? – 2015-02-07 05:49:11
@JonathanLeffler总共有8个错误,从if语句的每一行指向下方 – 2015-02-07 05:55:22
如果其中一行指向的是'if'语句,那么您的'spSymbolTable'数组的初始化方式有问题。你可能应该使用'calloc()',或者循环访问数组,并在首次分配时将每个条目设置为NULL。请注意'malloc()'不保证将内存调零。看起来,事情从那里走下坡路。至少你有'valgrind'来指出你的方式的错误。 – 2015-02-07 06:00:31