이것은 간단한 3 진 트리 구조입니다. 필자는 코드를 올바르게 작성했지만 실행 후 얼마 후에 말합니다 :3 진 트리에 오류가 있습니다.
죄송합니다. ternary.exe가 작동을 멈췄습니다.
이 오류의 원인을 알려주실 수 있습니까? (당신이 당신의 머리에서 실행해야 정신적으로)
#include<iostream>
#include<string>
using namespace std;
struct tnode{
int data[2];
tnode *ptr[3];
};
void swap(int *a,int *b){
int t;
t=*a;
*a=*b;
*b=t;
}
//for initializing tnode variables as null or null character
void newtree(tnode *&T){
T->data[0]='\0';
T->data[1]='\0';
T->ptr[0]=NULL;
T->ptr[1]=NULL;
T->ptr[2]=NULL;
}
void fillto(tnode *&T,int a){
if(T->data[0]=='\0'){
T->data[0]=a;
}
else if(T->data[0]!='\0'&&T->data[1]=='\0'){
T->data[1]=a;
if(T->data[0]>T->data[1])
swap(T->data[0],T->data[1]);
}
else{
if(a<T->data[0]){
if(T->ptr[0]==NULL){
T->ptr[0]=new(tnode);
newtree(T->ptr[0]);
}
fillto(T->ptr[0],a);
}
else if(a>T->data[1]){
if(T->ptr[2]==NULL){
T->ptr[2]=new(tnode);
newtree(T->ptr[2]);
}
fillto(T->ptr[2],a);
}
else{
if(T->ptr[1]==NULL){
newtree(T->ptr[1]);
T->ptr[1]=new(tnode);
}
fillto(T->ptr[1],a);
}
}
}
tnode *datatnode(string s){
int l=0;
tnode *T;
tnode *E;
T=new(tnode);
char c[0];
newtree(T);
E=T;
while(l<=s.length()){
c[0]=s[l];
cout<<atoi(c)<<endl;
fillto(T,atoi(c));
l++;
}
return E;
}
int main(){
string s="5398124";
tnode *T;
T=new(tnode);
T=datatnode(s);
cout<<T->data[0];
return 0;
}
'T = new (tnode); T = datatnode (s);'메모리를 새로 만들고 즉시 누설합니다. 그래도 충돌의 원인은 아닙니다. – BoBTFish
코드 디버깅을 시도 했습니까? 게다가 : 왜 C++ 코드는 C와 유사합니까 ('malloc'을'new'와'printf''를'cout'으로 대체하는 것 말고요?) 사실 당신의웨어가 C++ 코드를 작성한다면 언어를 사용하십시오. – Grizzly
Btw : 아마 그 소스의 유일한 문제는 아니지만'char c [0];'는 나에게 의심 스럽습니다. – Grizzly