【发布时间】:2018-09-16 03:50:47
【问题描述】:
我想知道我为程序创建的类是否会泄漏内存。
这是我的实现,
BubbleSort.h 有 3 个私有变量:
int arrSize = Array Size
int* intArray = Original Array
int* narr = Bubble Sorted Array
BubbleSort.cpp
#include "BubbleSort.h"
BubbleSort::BubbleSort(int size, int* arr)
{
arrSize = size;
intArray = arr;
printf("BubbleSort();\n");
}
// Object Destruction
BubbleSort::~BubbleSort()
{
free(narr);
}
int* BubbleSort::Sort() {
int swap = 0;
narr = (int*)malloc(arrSize * sizeof(int));
for (int i = 0; i < arrSize; i++) {
narr[i] = intArray[i];
}
for (int i = 0; i < arrSize - 1; i++) {
for (int j = (i + 1); j < arrSize; j++) {
if (narr[j] < narr[i]) {
swap = narr[i];
narr[i] = narr[j];
narr[j] = swap;
}
}
}
return narr;
}
这是我的主文件
#include "main.h"
#include "classes.h"
int main(int argc, char* argv[]) {
const int size = 10;
int arr[size] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
BubbleSort sort = BubbleSort::BubbleSort(size, arr);
int* narr = sort.Sort();
for (int i = 0; i < size; i++) {
printf("%d > %d\n", arr[i], narr[i]);
}
printf("Hello World.\n");
getchar();
}
这个程序在运行过程中会不会泄露内存?
当我运行代码时,我检查了 BubbleSort 实例“排序”是否正在破坏,但那只是在应用程序完成运行时。我目前正在学习如何在我的编程课程中使用malloc() 和free() 并且有一些空闲时间,所以我决定制作一个冒泡排序课程并想尝试一下!所以希望代码不要有太多错误(与指针的使用有关)。
【问题讨论】:
-
如果您排序不止一次,就会出现泄漏。注意:您应该能够在不分配更多内存的情况下进行排序。如果您需要保留原件,请将其复制并排序,因为您将获得更通用的排序方法。注意:这是 C++。所以你不应该在一些边缘情况之外使用
malloc/free。 -
除了泄漏之外,构造然后立即销毁类的实例将导致尝试释放未分配的内存、未定义的行为以及几乎可以保证的崩溃。
-
真的没必要写一个类来做冒泡排序。一个简单的功能就足够了。通常,当您需要在程序生命周期的某些部分维护状态时使用类。
-
当您更多地思考什么是内存泄漏(整个程序的全局错误功能)时,您就会明白您的问题毫无意义:一个类本身不能泄漏,只有使用它的整个程序可能(或不)泄漏。内存管理不是本地或模块化功能(这就是它如此困难的原因)。像valgrind 这样的工具可以提供帮助,因为它们可以观察整个程序的行为
标签: c++ memory-management memory-leaks