我目前正在进行一些地质分析,并在加载大小为65MB的.tif文件时遇到此错误,因此相对较小。在我的Macbook Air上,它有4GB的RAM,我可以使用退出代码0运行以下代码;但是,在我的16GB Windows桌面上,程序以退出代码-1073741819(0xC0000005)退出,在Windows错误代码中表示STATUS_ACCESS_VIOLATION错误。
这里是产生上述结果的代码:
from osgeo import gdal
import sys, threading
gdal.UseExceptions()
def driver():
ds = gdal.Open('srtm_21_05.tif')
band = ds.GetRasterBand(1)
elevation = band.ReadAsArray()
if __name__ == "__main__":
driver()
我通过更改堆和递归限制来修复此问题:
if __name__ == "__main__":
if sys.platform[:3] == "win": # Checks if Windows
sys.setrecursionlimit(10000000)
threading.stack_size(200000000)
thread = threading.Thread(target=driver)
thread.start()
else:
driver()
允许脚本执行,但它最终会以代码-1073741819(0xC0000005)退出,就像之前一样。
为什么会这样?与两个系统上可用的内存相比,65MB是一个如此小的文件,正如我的Macbook所示,脚本可以正常执行。为什么我需要为Windows而不是Mac设置这些递归限制?