Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory python中的内存错误_Memory_Python - Fatal编程技术网

Memory python中的内存错误

Memory python中的内存错误,memory,python,Memory,Python,我对python非常陌生,我知道非常好的C语言编程 在C中多次调用以下函数时,会导致内存错误: #include <stdio.h> #include <stdlib.h> char *foo(){ char *a=(char*)malloc(1000); return a; } void main(){ char *A; while(1){ A=foo() // Will cause memory leack

我对python非常陌生,我知道非常好的C语言编程 在C中多次调用以下函数时,会导致内存错误:

#include <stdio.h>
#include <stdlib.h> 
    char *foo(){
        char *a=(char*)malloc(1000);
        return a;
    }
void main(){
char *A;
while(1){
    A=foo()  // Will cause memory leack Or some kind of error and crash 
    }
}
我这样问是因为我知道“数据”是一个列表类型的对象,这意味着它就像C。。。
非常感谢

Python中内存块悬空时没有内存耗尽的风险。Python使用垃圾收集器来处理不再被引用的对象。因此,每次使用
foo()
的结果分配
data
时,前面的数组不再有任何指向它的引用,并将在某个点被垃圾收集器擦除

实际上,我认为在这个特定的示例中答案是否定的,因为每次在foo()开头创建列表时,python都会在检测到不再引用该列表时自动释放该内存,这将发生在将foo()的下一个返回值赋给while循环中的数据变量时


在C语言中,必须编写释放malloc()内存的代码。在python中,解释器正在分配内存,一旦不再需要,解释器可以自动释放内存。

讲cplusplus语言的python不支持内存泄漏:),但在python世界中,内存泄漏有不同的含义。让我举个例子:

some_dict = {}
k = 'key'
v = "value"
some_dict[k] = v

因此,现在
一些dict
包含一个到
k
的链接。如果
somedict
是一个长寿的对象,python将保持
v
活动,直到
somedict
死亡。若应用程序有很多longlive对象占用了操作系统的所有内存,它将在第一次分配失败后收到一个请求。如果您想接收
内存错误
-只需打开内存中的一些非常大的文件(超过RAM+交换量)。

@Jimilian@Jean-Noel Avila非常感谢!!我是Python新手。。我过去经常用C语言编程。。。完美的答案!
some_dict = {}
k = 'key'
v = "value"
some_dict[k] = v