此代码中是否有任何内存泄漏
Is there any memory leak in this code?
#include <iostream>
using namespace std;
int main()
{
int i,j;
int * k;
char m;
do{
cin >> j;
k = new int[j];
for (i = 0; i < j; i++){
k[i] = i;
cout << k[i] << ", ";
}
delete[] k;
cout << "nContinue?n";
cin >> m;
}while (m != 'n');
}
这是我为描述我在理解new
和delete
方面的问题而制作的程序。"k"会产生内存泄漏吗?
此代码不是异常安全的 - 如果在 new[]
和 delete[]
之间引发异常,则指向的块将被泄漏。使用std::vector
来解决此问题。
正如 Sharptooth 已经指出的那样,您应该使用 try-catch 块来确保捕获任何异常并释放k
。在一般情况下,您可以使用 valgrind 来检查您的程序是否释放了在执行期间分配的所有块。
不,在这种情况下,当您释放循环中的内存时,它不会。但是,在这种情况下,最好使用scoped_array。
相关文章:
- 尝试摆脱任何堆内存分配
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- c++ 编译器是否保护常量内存地址免受任何更改?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 在没有任何锁的情况下加入另一个线程后是否需要内存围栏?
- 如果 RMW 操作没有任何变化,是否可以针对所有内存顺序对其进行优化
- 指针可以用于访问内存中的任何任意区域吗?
- QaudioOutput代码是否有任何内存泄漏
- Do C 参考需要任何内存
- 此代码中是否有任何内存泄漏
- 两个线程之间是否存在任何内存泄漏(缓冲、清空)
- 字符 *str;str= "HELLO" ;如何在不为字符串分配任何内存的情况下工作?
- 如何在c++中声明变量我不想定义它,所以它不应该只消耗声明中的任何内存
- 从任何内存地址读取UInt32的最有效方法
- 阻止向特定应用程序注入任何内存或DLL文件
- Valgrind 没有检测到任何内存泄漏。这有多安全?
- 在C/ c++中通过int main()返回0,在任何操作系统上,清除程序在任何(RAM,缓存或任何…)内存中使用的所有
- 函数中是否有任何内存泄漏,如function(new Foo())
- 我可以读取任何内存值吗
- 初始化const-char*,去掉任何内存泄漏