为什么单个指针有2个不同的内存地址? - C

时间:2018-01-05 15:28:42

标签: c pointers memory nodes allocation

一些上下文..我正在尝试用C创建动态树,我基本上差不多完成了。

问题是,目前,我遇到了一个分段错误,这似乎与将当前节点(结构“TABLEAU”)的指针传递给函数有关。

当将TABLEAU * current传递给addNewBetaNodes()时,我尝试只打印一次当前节点的地址(打印用于调试 - 我没有其他方法可以找出发生了什么)... < / p>

  void addNewBetaNodes(TABLEAU *current, char *subStringLeft, char *subStringRight) {

  printf("addNewBetaNodes *current = %p\n", (void *)current);

但是,运行程序时我得到以下输出:

addNewBetaNodes *current = 0x7f9b45c02c20
addNewBetaNodes *current = 0x7f9b45c02c50

由于某种原因,现在有一个指针有2个不同的内存地址?

有人可以解释为什么/如何发生这种情况。非常感谢

void addNewBetaNodes(TABLEAU *current, char *subStringLeft, char *subStringRight) {


printf("addNewBetaNodes *current = %p\n", (void *)current);

  if((current->left == NULL) && (current->right == NULL) && (current->straight == NULL)) { //IF NODE IS LEAF
    current->left = new_leaf(current, subStringLeft);
    current->right = new_leaf(current, subStringRight);
    printf("Made new beta nodes: %s   AND: %s\n", (current->left->formula), (current->right->formula));
    printf("addNewBetaNodes() Current: %p\n", (void *)current);
    printf("addNewBetaNodes() Current->left: %p, Current->right: %p\n", (void *)current->left, (void *)current->right);
  }

  else if((current->straight != NULL) && (current->left == NULL) && (current->right == NULL)) { //IF NODE IS UNARY
    addNewBetaNodes(current->straight, subStringLeft, subStringRight);
  }

  else if((current->left != NULL) && (current->right != NULL) && (current->straight == NULL)) {
    addNewBetaNodes(current->left, subStringLeft, subStringRight);
    addNewBetaNodes(current->right, subStringLeft, subStringRight);
  }
}

1 个答案:

答案 0 :(得分:3)

你的printf()正在打印当前内容作为指针,没有理由期望不同函数调用之间的当前电流是相同的。事实上,对于这个功能,我期望当前的内容是不同的。

即使您要打印和当前,但获得不同结果并不奇怪,这将取决于当前变量落在堆栈上的位置。