2 musichien MUSICHIEN 于 2016.04.02 00:02 提问

每次程序都崩溃,求大神debug 10C

小的C++初学者一枚,在做一个题目:给出preorder和inorder二叉树顺序,推出potorder顺序。目前程序已经写完,可是总是在运行时崩溃,不知哪里出了问题?
题目页面:http://wirelesslab.sjtu.edu.cn:8088/jol/problem.php?cid=1005&pid=0
...

#include
#include
#include

using namespace std;

int length;

struct TreeNode
{
struct TreeNode* left;
struct TreeNode* right;
char elem;
};

void sort(char preorder, char *inorder, int length)
{
TreeNode
node = new TreeNode;
node->elem = *preorder;
int rootIndex = 0;
for(;rootIndex < length; rootIndex++)
{
if(inorder[rootIndex] == *preorder)
break;
}
//Left
sort(inorder, preorder +1, rootIndex);
//Right
sort(inorder + rootIndex + 1, preorder + rootIndex + 1, length - (rootIndex + 1));

cout<<node->elem<<endl;

delete node;
return;

}

int main()
{
int time;
scanf("%d", &time);
int count=0;
while(count < time)
{
string str;
char temp;
int i;

    while((temp=cin.get())!='\n')
    {
            str +=temp;
    }
    length =str.length();

    char* preorder = new char[length];
    char* inorder = new char[length];

    for(i = 0;i<length;i++)
    {
        preorder[i]=str[i];
    }

    for(i=0;i<length;i++)
    {
        scanf("%c", inorder[i]);
    }

    sort(preorder, inorder, length);

    count++;
    delete preorder;
    delete inorder;
}
return 0;

}

5个回答

zanfeng
zanfeng   2016.04.02 00:47

node->elem = *preorder; 确定是这样的

WinsenJiansbomber
WinsenJiansbomber   2016.04.02 05:43

一定是内存越界了,再检查代码,特别是指针

lyhoo163
lyhoo163   Rxr 2016.04.02 08:17

你的代码,是对内存的指针操作,一旦内存越界,自然就崩盘了 。

qq423399099
qq423399099   Ds   Rxr 2016.04.02 08:21

崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。

qq423399099
qq423399099 回复MUSICHIEN: 楼主有好几个问题感觉:1.TreeNode node = new TreeNode应该是TreeNode *node = new TreeNode;2.void sort函数第一个参数应该是char *类型吧 3.scanf("%d", &time);后面应该加上fflush(stdin)清空输入缓冲区(否则while((temp=cin.get())!='\n')会直接读取输入缓冲区遗留下来的回车符而跳过循环中的语句,从而length等于0,之后char* preorder = new char[length];//new char[0],之后用到preoder一定崩)
一年多之前 回复
MUSICHIEN
MUSICHIEN 回复小灸舞: 崩溃后程序显示“按任意按键继续”,无论怎样操作,最终都会退出啊![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/37.gif)
一年多之前 回复
longyuzi
longyuzi   2016.04.02 09:15

TreeNode node = new TreeNode;这句就出错了,要加上struct

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!