我正在为Postfix计算器编写代码,为此我需要将标记和值(“ a = 5”,“ b = 10”)添加到指针数组。
此指针数组在我实现单独链接时使用。因此,每个索引都是标记和值的链接列表的开头。 但是,存在这种奇怪的错误/错误,因此在该指针没有进行内存访问或地址更改的情况下,数组中指针的地址(以所有NULL开头)会在两者之间发生变化。 这发生在通过指针数组进行解析之间。 1上的图像准确显示了我在程序上运行GDB时发生的情况。红色箭头指示正在执行的行。蓝色区域是正在监视的内存,黄色突出显示的行表示地址已更改。您可以看到同一symtab-> table [3]的先前地址都等于NULL({0x0})。 知道为什么会这样吗? 代码本身在下面
//This part of the program iterates through each linked list
//Previous declaration of Array of Pointers-
//Symbol* localArrayOfPointers[HASH_TABLE_INITIAL]
Symbol** current = symtab->table;
for (int i = 0; i < hash_get_capacity(symtab); i++)
{ //The address changes in between here I believe
if(current[i] == NULL){
continue;
}
else{
//Other code omitted as there is nothing changing any addresses
答案 0 :(得分:2)
未初始化的指针不必是NULL指针,它可以指向任何地址,因此“ if”中的表达式始终为false,除非已将其分配给NULL。
答案 1 :(得分:0)
当前声明可能有问题。
指针数组表示Symbol *current[n]
。
在您的代码中,它是指向指针的指针(双指针)。但是,我知道您需要一个指针数组。
您正在索引双指针并检查是否为null。因此,那需要一个指针数组。