我正在爲我編寫的編譯器創建符號表,並且當我嘗試添加到符號表時,我不斷收到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