gpt4 book ai didi

c++ - 查找数组之间的内存泄漏

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:58 25 4
gpt4 key购买 nike

我认为这对你们来说相当简单..在我程序的某个地方我有内存泄漏..但我似乎找不到它..我很确定它与数组有关。 .

我的程序打算采用一个 1 整数参数,创建一个该大小的数组,然后创建另一个两倍于该整数的数组(全部填充随机值)。

例如输入 = 4输出=54 73 18 92
52 20 67 6 14 38 87 19 77

我想我没有正确删除数组...

这是我当前的代码:

#include <iostream>
#include <cstdlib>
using namespace std;

int* initArray(int);
int fillArray(int *, int);
int* doubleArray(int *, int);
void displayArray(int *, int);

/*
* The program will create an array of given size
* populate the array with random number from (0-99)
* and display the array. Next, the program will double
* the size of the array, repopulate the array and
* display it again.
*/


int main(int argc, char ** argv){
if (argc != 2){
cout << "wrong number of arguments" << endl;
exit(1);
}

int n = atoi(argv[1]); // get size
srand(time(0));

// create initial array and display it
int* ptr = initArray(n);
fillArray(ptr, n);
displayArray(ptr, n);

// create the double sized array and display it
doubleArray(ptr, n);
fillArray(ptr, 2*n);
displayArray(ptr, 2*n);
}

// Create an array of size n and return its address
int* initArray(int n){
int arr[n];
int *ptr = arr;
return ptr;
}

// Fill array ptr with n random numbers
int fillArray(int *ptr, int n){
for(int i=0; i<n; i++){
ptr[i] = rand() % 100;
}
}

// Double the size of the array, make sure no memory leak
int* doubleArray(int *ptr, int n){
int size = 2*n;
int * tmp = new int[size];
ptr = tmp;
delete tmp;
return ptr;
}

// Display n array elements
void displayArray(int *ptr, int n){
for(int i=0; i<n; i++){
cout << ptr[i] << " ";
}
cout << endl;
}

当我现在运行它时,输入 4,我的输出如下所示:34 6 4199259 190 6 4199259 1 88 32 94 77

有些值相同的事实告诉我我没有正确清除内存,我认为这与删除我清除的第一个数组然后删除第二个数组有关..但我可以想明白了

任何帮助都会很棒

最佳答案

int* initArray(int n){
int arr[n];
int *ptr = arr;
return ptr;
}

在上面的代码中,您返回了一个指向局部变量 arr 的指针。当此函数的范围结束时,使用 ptr 是未定义的行为。

int* doubleArray(int *ptr, int n){
int size = 2*n;
int * tmp = new int[size];
ptr = tmp;
delete tmp;
return ptr;
}

在这里你删除了 tmp 指向的内存。现在使用指向已删除内存的 ptr 即使在同一个函数中也是未定义的行为。

解决方案:在函数内部动态分配内存

 int *arr =new int[number_of_elements_required];
return arr;

关于c++ - 查找数组之间的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39687449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com