【发布时间】:2013-11-18 04:41:50
【问题描述】:
我正在为一项作业编写代码,但遇到了一个我不理解的错误。声明时出现分段错误
maxWinnerTreeNode** node = new maxWinnerTreeNode*;
maxWinnerTreeNode *current;
for(int i = 1; i <= numNodes; i++){
current = new maxWinnerTreeNode();
node[i] = current;
}
基本上我想做的是声明一个treeNode指针数组来初始化一个完整的二叉树,我从下到上创建树。我在 Windows 操作系统上编写和测试此代码,然后将其提交给在 Linux 操作系统上测试它的讲师。上面的双指针声明在 Windows 上没有给我任何问题。一旦我在 Linux 上编译,它就会引发段错误。我在Linux服务器上调试,发现必须声明为
maxWinnerTreeNode** node = new maxWinnerTreeNode*[numNodes];
maxWinnerTreeNode *current;
for(int i = 1; i <= numNodes; i++){
current = new maxWinnerTreeNode();
node[i] = current;
}
其中 numNodes 是我需要初始化这个完整且完整的二叉树的节点数量(2 的幂)。所以我的问题是为什么 Linux 机器会抱怨最初不知道第一个指针的大小。我的印象是指针声明是一种动态创建数组的方法。
我在 Windows 上运行 gcc 版本 4.8.1。代码分级的 Linux 服务器运行 gcc 4.6.4。唯一明显的答案是版本的不同。只是想知道是否其他人有任何其他想法。
【问题讨论】:
标签: c++ pointers gcc segmentation-fault