gpt4 book ai didi

c++ - 找不到内存泄漏

转载 作者:搜寻专家 更新时间:2023-10-31 00:18:54 26 4
gpt4 key购买 nike

我正在学习 C++,我的讲师让我们复习动态内存分配。在下面的代码中,我似乎有内存泄漏,因为当我运行程序时,我必须在最后解决它。

在输出中我得到的一切都是正确的,除了 Data: 字段应该列出数组中的所有数字,但却给我一些 -3435893 乱码。

最低: 也这样做。在程序显示所有内容后,我收到内存错误,内存正在堆缓冲区结束后写入。

我对这一切都不熟悉,但我猜问题出在访问 arrPTR[0] 时只是因为我对 Lowest: 而不是 Highest:< 遇到了同样的问题。我不确定,但如果能得到任何帮助,我将不胜感激。

#include <iostream>

using namespace std;

int* readArray(int&);
void sortArray(int *, const int * );
int findMode(int*, const int *);
double averageNumber(int*,const int*);
void lowestHighest(int*,const int*,int&,int&);
void printFunc(int*,const int*, int, int, double);

int main ()
{
int size = 0;
int *arrPTR = readArray(size);
const int *sizePTR = &size;
sortArray(arrPTR, sizePTR);
int mode = findMode(arrPTR,sizePTR);
double average = averageNumber(arrPTR, sizePTR);
int lowest = 0, highest = 0;
lowestHighest(arrPTR,sizePTR,lowest,highest);
printFunc(arrPTR,sizePTR,lowest,highest,average);

delete [] arrPTR;
system("pause");
return 0;
}

int* readArray(int &size)
{
cout<<"Enter a number for size of array.\n";
cin>>size;
int *arrPTR = new int[size];

for(int count = 0; count < size; count++)
{
cout<<"Enter positive numbers to completely fill the array.\n";
cin>>arrPTR[count];
}

return arrPTR;
}

void sortArray(int *arrPTR, const int *sizePTR)
{
int temp;
bool swap;

do
{
swap = false;
for(int count = 0; count < *sizePTR; count++)
{
if(arrPTR[count] > arrPTR[count+1])
{
temp = arrPTR[count];
arrPTR[count] = arrPTR[count+1];
arrPTR[count+1] = temp;
swap = true;
}
}
} while (swap);
}

int findMode(int *arrPTR, const int *sizePTR)
{
int most_found_element = arrPTR[0];
int most_found_element_count = 0;
int current_element = arrPTR[0];
int current_element_count = 0;
int count;

for (count = 0; count < *sizePTR; count++)
{
if(count == arrPTR[count])
current_element_count++;
else if(current_element_count > most_found_element)
{
most_found_element = current_element;
most_found_element_count = current_element_count;
}
current_element = count;
current_element_count=1;
}

return most_found_element;
}

double averageNumber(int *arrPTR,const int *sizePTR)
{
double total = 0;

for (int count = 0; count > *sizePTR; count++)
total+=arrPTR[count];

double average = total / *sizePTR;
return average;
}

void lowestHighest(int *arrPTR, const int *sizePTR,int &lowest, int &highest)
{
//Since array is already sorted the lowest number will be in the lowest element and the highest will be in the highest element.
lowest = arrPTR[0];
highest = arrPTR[*sizePTR-1];
}

void printFunc(int *arrPTR, const int *sizePTR, int lowest, int highest, double average)
{
cout<<"Array Stats\n";
cout<<"Data:";
for(int count = 0; count < *sizePTR; count++)
cout<<arrPTR[count];
cout<<"\n";
cout<<"Mode:"<<endl;
cout<<"Average:"<<average<<endl;
cout<<"Low Value:"<<lowest<<endl;
cout<<"High Value:"<<highest<<endl;
}

最佳答案

我发现的第一件事是,在 sortArray 中,您访问的元素 count + 1 可以是数组末尾之后的一个元素。之后,关于您的程序行为的所有其他赌注都将关闭。

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

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