一些上下文..我正在尝试用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);
}
}
答案 0 :(得分:3)
你的printf()正在打印当前内容作为指针,没有理由期望不同函数调用之间的当前电流是相同的。事实上,对于这个功能,我期望当前的内容是不同的。
即使您要打印和当前,但获得不同结果并不奇怪,这将取决于当前变量落在堆栈上的位置。