Cpp中的内存问题

时间:2014-12-10 23:45:16

标签: c++ memory

我有几个问题:

1)当我静态分配1 000 000 int的数组时,我得到了堆栈溢出错误:

int temp1[48][48];
int im2 [1000000];
int step = 8;
int lcol, lrow;
....

虽然,1000000*sizeof(int)=4 000 000< 4 Mb。我有大约8 GB的RAM。

2)当我使用动态分配(new和Malloc函数)并忘记删除内存时会发生什么?我未来的编辑是否会受到过去汇编中内存泄漏的影响?

3)如果是,我该如何解决?我应该关闭并打开visual studio,还是我必须重启我的电脑?

4)如果我正确地使用带有相应删除操作的动态分配,但我在调试模式下工作(逐步编译)并编译了#34; new"命令并没有编译"删除"命令,会有内存泄漏吗?

2 个答案:

答案 0 :(得分:5)

平台对堆栈大小有限制并不罕见。

在您可能使用的每个现代平台上,一个过程'地址空间一旦终止就不再存在。因此,在进程终止时,无需对已分配的地址空间(已备份或未备份)的泄漏进行任何操作。地址空间不再存在,因为它属于流程。

如果分配而不删除,则在程序终止之前将浪费该地址空间。大量的,这可能会产生性能问题和资源消耗问题。

答案 1 :(得分:1)

根据您的症状,这些行位于函数内:

int temp1[48][48];
int im2 [1000000];

所以他们不是静止的。此类存储的C术语是自动。您可以使用static关键字将它们设置为静态,这将使它们不受堆栈溢出的影响。这里不需要使用malloc,尽管这是一个选项。