我試圖實現一個二叉搜索樹來查找莫爾斯碼轉換,但是我在繞過這個概念和涉及的結構時遇到了麻煩。在C中設置二進制搜索的結構和節點,內存違規
我的更具體的問題是,我得到了一些內存違規,就像我正在寫給我的內存不可用。
我的結構是這樣的......
typedef struct mtn{
char ASCII;
int isinit;
struct mtn *dah;
struct mtn *dit;
} MTN;
typedef struct tree{
struct mtn *root;
} Tree;
,問題中的代碼就是我試圖初始化樹。
具體...
struct mtn* mtnNew()
{
struct mtn *node;
node = (MTN *)malloc(sizeof(MTN));
node->isinit = 0;
node->dit = NULL;
node->dah = NULL;
return node;
}
void initializeTree(char ch, char *mch, Tree *tr)
{
MTN *curr = NULL;
int i = 0;
tr-> root = mtnNew(); //This is where the program breaks
而如果任何人有任何的提示,這裏的函數的其餘部分...
void initializeTree(char ch, char *mch, Tree *tr)
{
MTN *curr = NULL;
int i = 0;
tr-> root = mtnNew();
curr = tr-> root;
if(strlen(mch) == 1)
{
if(mch[i] == '-')
{
curr = mtnNew();
curr-> dah-> ASCII = ch;
curr-> dah-> isinit++;
}
else if(mch[i] == '.')
{
curr = mtnNew();
curr-> dit-> ASCII = ch;
curr-> dit-> isinit++;
}
else
printf("wut");
}
while(mch[i] != '\0')
{
if(mch[i] == '-')
{
if(curr-> dah == NULL)
curr-> dah = mtnNew();
curr = curr-> dah;
i++;
}
else if(mch[i] == '.')
{
if(curr-> dit == NULL)
curr-> dit = mtnNew();
curr = curr-> dit;
i++;
}
}
curr-> ASCII = ch;
curr-> isinit++;
return;
}
不管怎麼說,任何幫助表示讚賞,因爲是方向良好的參考或其他有用的信息。
謝謝!
編輯:
愛好者,愛好者,和myTree被初始化如下...
char buff, buffs[8];
Tree *myTree = NULL;
我對initializeTree()調用
while(!feof(BTkeyFile))
{
i = 0;
buff = fgetc(BTkeyFile);
for(i = 0; i < 8; i++)
buffs[i] = '\0';
while(buffs[--i] != '\n')
{
buffs[i] = fgetc(BTkeyFile);
i++;
}
initializeTree(buff, buffs, myTree);
}
而且它讀取該文件格式
A.-
B-...
C-.-.
D-..
E.
etc.
編輯2:
這絕對是線路tr-> root = mtnNew();
打破代碼,在函數內部和main()錯誤停止在該行。
你怎麼稱呼'initializeTree()'? – Rohan 2014-12-07 13:02:33
我添加了一個顯示它是如何完成的編輯@Rohan – Charles 2014-12-07 13:10:36
'curr = mtnNew();'關聯丟失。 – BLUEPIXY 2014-12-07 13:14:12