-4

我有一个 Python 代码,它使 python 解释器随机崩溃。我试图找出问题的根源,但我仍在调查。在网上搜索可能导致解释器崩溃的问题时,我偶然发现了这一点:

def crash():
    '''\
    crash the Python interpreter...
    '''
    i = ctypes.c_char('a')
    j = ctypes.pointer(i)
    c = 0
    while True:
            j[c] = 'a'
            c += 1
    j

http://wiki.python.org/moin/CrashingPython

由于我使用的是 Ctypes,我认为问题可能与 Ctypes 的使用方式有关。所以我试图理解为什么该代码会使 Python 解释器崩溃。理解它有助于调查我在 Ctypes 代码中的问题。

有人可以解释一下吗?

帮助将不胜感激。

4

2 回答 2

2

它创建一个指向可能不可写的内存的指针,然后写入它。

的数值a非常小,非常低的内存地址通常是不可写的,当你尝试写入它们时会导致崩溃。

如果初始写入成功,它会继续尝试连续的地址,直到找到一个不可写的地址。并非所有内存地址都是可写的,因此它最终必然会崩溃。

(为什么它不简单地从地址零开始,我不知道 - 这有点奇怪。也许 ctypes 明确地防止这种情况发生?)

于 2013-06-05T20:49:31.353 回答
0

问题似乎是您无限期地写入内存位置。所以会到访问的内存不可写,程序崩溃的时候。

于 2013-06-05T20:50:40.857 回答