我发现 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():损坏的未排序 block 。
如果我将代码更改为:
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进行了测试。
谢谢 曼努埃尔
最佳答案
第一个示例:在 python 2.7 中测试有效,并告诉我在哪一行发生错误
第二个例子:你必须知道当你调用 f.read() 时,文件中的光标到达文件末尾,因此另一个 f.read() 将不会输出任何内容,即 ''所以这两个例子是不同的
关于Python 3 : Crash with free(): corrupted unsorted chunks while reading file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40775619/