首页 > 解决方案 > C指针数组随机更改地址

问题描述

我正在为后缀计算器编写代码,为此我需要将标记和值(“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

标签: cpointers

解决方案


未初始化的指针不一定是 NULL 指针,它可以指向任何地址,因此“if”中的表达式始终为假,除非它已分配给 NULL。


推荐阅读