[英]Call stack error when creating binary tree with recursion
以下代码运行一秒钟,然后由于node-> data = * data;导致运行时错误。
Node *TreeCreate(int level, const char *data)
{
Node *node = malloc(sizeof(node));
if (node != NULL) {
node->data = *data;
}
if (level != 0) {
node->leftChild = TreeCreate(level - 1, data + 1);
node->rightChild = TreeCreate(level - 1, data + (int)pow(2, level - 1));
}
return node;
}
即使您为* data所引用的字符串保留了至少pow(2,level)个字符,下一个TreeCreate()调用也不会超出以下范围:
TreeCreate(level, data) //-->
TreeCreate(level, data + 1) //--> ...
TreeCreate(level, data + pow(2, level-1) // -->
TreeCreate(level, data + pow(2, level-1) + 1) //--> well still may fit to you string
TreeCreate(level, data + pow(2, level-1) + pow(2, level-2) // --> may not fit
例如,level = 4,由data = 16指向的字符串的大小,当沿着leftChild的TreeCreate()调用树时,将导致:data + 4 + pow(2,3)+ pow(2,2)+ pow(2,1)->数据+ 18(!!)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.