gpt4 book ai didi

C++ 二叉树适用于 CentOS 6 但不适用于 Mac OSX Mavericks

转载 作者:行者123 更新时间:2023-11-28 02:44:59 25 4
gpt4 key购买 nike

现在我很困惑,为什么下面的程序在我的 CentOS 6 机器上似乎运行良好,但运行编译后的程序会导致在我的 Mac OSX 上出现 Seg Fault 11。我使用 Eclipse 和 gdb 调试器在我的 Macbook 上进行调试,结果有些奇怪。这是一个简单的二叉树示例:

#include <iostream>
#include <stdlib.h>

#include "binary_tree.h"

using namespace std;

struct node* newNode(int x) {
struct node *n = (struct node*)malloc(sizeof(struct node*));
n->x = x;
n->left = NULL;
n->right = NULL;

return n;
}

struct node* insert(struct node *node, int x) {
if(node == NULL) {
return newNode(x);
} else {
if(x <= node->x) {
node->left = insert(node->left, x);
cout << "INSERTED " << x << " LEFT OF " << node->x << endl;
} else {
node->right = insert(node->right, x);
cout << "INSERTED " << x << " RIGHT OF " << node->x << endl;
}

return node;
}
}

int main(void) {
//Pointer to root node
struct node *root = NULL;

root = insert(root,4);
root = insert(root,2);
root = insert(root,3);
root = insert(root,5);
root = insert(root,1);
root = insert(root,7);

return 0;
}

和头文件:

/*
* binary_tree.h
*
* Created on: Jul 12, 2014
* Author: ccravens
*/

#ifndef BINARY_TREE_H_
#define BINARY_TREE_H_

struct node {
int x;
struct node *left;
struct node *right;
};

#endif /* BINARY_TREE_H_ */

感谢任何提示,谢谢!

最佳答案

这一行:

struct node *n = (struct node*)malloc(sizeof(struct node*));

应该是:

struct node *n = (struct node*)malloc(sizeof(struct node));

您分配的是指针(8 字节)而不是结构节点(24 字节)。通过在 valgrind (www.valgrind.org) 下执行您的程序,很容易发现此类问题。

关于C++ 二叉树适用于 CentOS 6 但不适用于 Mac OSX Mavericks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24727785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com