作者easyget (easyget)
看板C_and_CPP
标题[问题] malloc issue
时间Sun Dec 6 11:56:52 2015
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
C ( code-block )
问题(Question):
练习 tree traversal 时,有时候编译 okay, 有时候又会挂掉
每次只要挂掉,都是在第 4 次 malloc 时死掉的
有大大知道是什麽原因吗 ?
谢谢解答罗...
----
下面是编译在网页的程式码
http://codepad.org/cGbffeBr
程式码(Code):(请善用置底文网页, 记得排版)
// Listing_05_01
// Tree Traversal
#include <stdio.h>
#include <stdlib.h>
#define SIZE 9
typedef struct node * treePointer;
typedef struct node {
char data;
treePointer leftChild, rightChild;
};
treePointer init(void);
void inorder(treePointer ptr);
int main(void)
{
treePointer start;
start = init();
inorder(start);
return 0;
}
treePointer init(void)
{
treePointer tree[SIZE];
int i;
for(i = 0; i < SIZE; i++){
printf("%d\n", i);
tree[i] = malloc(sizeof(tree[i]));
tree[i]->leftChild = NULL;
tree[i]->rightChild = NULL;
}
// tree initial
tree[0]->data = '+';
tree[0]->leftChild = tree[1];
tree[0]->rightChild = tree[2];
tree[1]->data = '*';
tree[1]->leftChild = tree[3];
tree[1]->rightChild = tree[4];
tree[2]->data = 'E';
tree[3]->data = '*';
tree[3]->leftChild = tree[5];
tree[3]->rightChild = tree[6];
tree[4]->data = 'D';
tree[5]->data = '/';
tree[5]->leftChild = tree[7];
tree[5]->rightChild = tree[8];
tree[6]->data = 'C';
tree[7]->data = 'A';
tree[8]->data = 'B';
return tree[0];
}
void inorder(treePointer ptr)
{ // in-order traversal
if(ptr){
inorder(ptr->leftChild);
printf("%c", ptr->data);
inorder(ptr->rightChild);
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.171.33.106
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1449374214.A.048.html
1F:→ LPH66: tree[i] = malloc(sizeof(tree[i])); //这行错了 12/06 12:23
2F:→ LPH66: 仔细回想送进 malloc 的是谁的 sizeof 12/06 12:24
3F:→ easyget: 将 sizeof(treePointer) 改成 sizeof(struct node) 後 12/06 13:29
4F:→ easyget: 一切就正常了, 谢谢大大的说明 (原来我之前很多错误>"<) 12/06 13:30
5F:推 OPIV: sizeof(*tree[i])比较容易理解 12/06 15:33
6F:→ easyget: 谢谢大大,这样确实比较容易阅读 12/06 16:00