我的 PyObject 在获取它的值时变成了一个 Bytes 对象
所以最近,我正在用 C 做一个项目,我在其中实现了几种类型的树,以便能够在 python 中使用它们,因为 C btree 实现比 Python 快得多。(Ikr 有一些可用的库,但由于在锁定期间我有更多的空闲时间,我想,我可以做我自己的库。)
一切正常,直到我想找到一个元素,并在同一行打印它的值。当我这样做时,我的Node对象变成了一个Bytes对象,没有任何进一步的赋值。
更多信息
操作系统:Ubuntu 16.04。
Python 版本:Python 3.5.2
GCC:5.4.0-6 Ubuntu
蟒蛇代码:
import mylib
import random
maxv = 10
def addValues(tree, values):
for value in values:
tree.insert(value)
def main():
my_list = [i for i in range(maxv)]
#random.shuffle(my_list)
tree = mylib.BinaryTree('test')
addValues(tree, my_list)
print(tree.find(3).getValue())
print(tree.sort(False))
main()
预期输出(如果主函数中最后一行之前的行是有效的print(tree.find(3))):
3
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
我用上面的测试代码得到的输出:
3
Segmentation fault
发生分段错误,因为包含值的节点在打印其值时3成为Bytes对象。下面的代码将打印新的Node.
import mylib
import random
maxv = 10
def addValues(tree, values):
for value in values:
tree.insert(value)
def main():
my_list = [i for i in range(maxv)]
#random.shuffle(my_list)
tree = mylib.BinaryTree('test')
addValues(tree, my_list)
print(tree.find(0).getValue()) #0 is going to be the root node's value, since random.shuffle is not happening.
print(tree.root)
print(tree.sort(False))
main()
输出:
0
b'0'
Segmentation fault
我花了几天时间对此进行调试,而且由于我绝对不是 C 编程高手,(您将在下面看到),我找不到错误。我想继续,并实现更多功能,但我无法找到错误。我有可能错过了一些如此微不足道的事情,或者我不知道的事情。遗憾的是,我不是经验丰富的 C 程序员。:/
我的模块包含更多代码,我不会发布这个问题不需要的代码。如果您认为应该多看一些以理解我的代码,请随时告诉我!我也希望我的代码可读性好!
有人可以解释到底发生了什么吗?
谢谢你!
临摹微笑
相关分类