Python 3:使用free()崩溃:在读取文件时损坏未分类的块

时间:2016-11-23 23:07:42

标签: python python-3.x crash

我在Python 3中发现了以下奇怪的行为:

file = open(path, mode='rb').read()
file_ori = open(self.filePath, mode='rb').read()

m = hashlib.md5()
md5 = m.update(file)
md5 = m.hexdigest()

file = '0x'.encode('ascii') + binascii.hexlify(file)
file_ori = '0x'.encode('ascii') + binascii.hexlify(file_ori)

在这种情况下,我的应用程序迟早会因 free():已损坏的未排序块而崩溃。

如果我将代码更改为:

file = open(path, mode='rb')
file_ori = open(self.filePath, mode='rb')

filecont = file.read()
file_oricont = file_ori.read()

m = hashlib.md5()
md5 = m.update(filecont)
md5 = m.hexdigest()

fileb = '0x'.encode('ascii') + binascii.hexlify(filecont)
fileb_ori = '0x'.encode('ascii') + binascii.hexlify(file_oricont)

应用程序正常运行。

我多次阅读文档,但无法找到此行为的任何原因。有人可能对此有更多了解吗?在我看来,Python和垃圾收集存在一个错误?

我使用python3.4和python3.5进行了测试。

由于 曼努埃尔

1 个答案:

答案 0 :(得分:2)

第一个例子:在python 2.7中测试过并告诉我发生错误

第二个例子:您必须知道何时调用f.read()文件中的光标到达文件的末尾,以便另一个f.read()将不输出任何内容,即&# 39;'所以这两个例子是不同的