gpt4 book ai didi

c++ - 为什么我的程序会因大值而不是小值而导致程序崩溃?

转载 作者:行者123 更新时间:2023-11-30 03:45:01 27 4
gpt4 key购买 nike

为什么我的程序会因大值而不是小值而崩溃?如果我输入 1-3,程序会执行它应该执行的操作,但是当我输入大于该值的数字时,程序会崩溃和/或无法完成?这与指针错误或我引用某些内容的方式有关吗?我不确定所以任何帮助表示赞赏。谢谢!

代码:

#include <iostream>
using namespace std;

void getData (int size, int *Arr){

cout << "\n\nEnter integer data one line at a time\n" << endl ;

for (int i=0; i < size; i++){
cin >> Arr[i];
}
}

void findMinAndMax(int array[], int size, int *min, int *max) {

int smallest = array[0];
int largest = array[0];

*min = smallest;
*max = largest;

for (int i = 1; i < size; i++)
{
if (array[i] > *max){
*max = array[i];
cout << "Max Value (loop): " << *max << endl;
}
if (array[i] < *min){
*min = array[i];
cout << "Min Value (loop): " << *max << endl;
}
}

// testing code
cout << "Min Value: " << *min << endl;
cout << "Max Value: " << *max << endl;

}

int *makeFrequency (int data[], int dSize, int *minDataValue, int *maxDataValue) {

cout << "Min Value Pre: " << *minDataValue << endl;// testing code
cout << "Max Value Pre: " << *maxDataValue << endl;// testing code
findMinAndMax(data, dSize, minDataValue, maxDataValue);
cout << "Min Value Post: " << *minDataValue << endl; // testing code
cout << "Max Value Post: " << *maxDataValue << endl;// testing code


int fSize = *minDataValue + *maxDataValue;

cout << "fSize: " << fSize << endl; // testing code

int *frequency;
frequency = new int [fSize];

// if frequency is 0, end
if (frequency == 0)
{
return 0;
}

// set all elements to 0 in array frequency
for (int i = 0; i <= fSize; i++) {
frequency[i] = 0;
}


for (int i = 0; i <= dSize; i++) {
int j = data[i] - (*minDataValue) + 1;
frequency[j] = frequency[j] + 1;
}

return frequency;
}

void makeHistogram (int *freq, int min, int max ){

cout << "Frequency Value HISTOGRAM: " << *freq << endl;

cout << "\n\n\n ----------- Histogram ----------------\n" << endl;

int size = min + max;
cout << "Size Value HISTOGRAM: " << size << endl;

for (int i = 0; i < size; i++){

if (freq[i] > 0) {

cout << "\n" << min + i - 1 << ": ";

for (int j = 0; j < freq[i]; j++) {
cout << '*';
}
}
}
cout << endl << endl;
}

int main() {

int dSize;
int *ArrayOfInts;

cout << "How many data values? ";
cin >> dSize;

ArrayOfInts = new int [dSize];

getData(dSize, ArrayOfInts);


int *frequency, min, max;

frequency = makeFrequency(ArrayOfInts, dSize, &min, &max);

if (frequency == 0) return -1;

cout << "Min Value MAIN: " << min << endl; // testing code
cout << "Max Value MAIN: " << max << endl; // testing code
cout << "Frequency Value MAIN: " << *frequency << endl;

makeHistogram(frequency, min, max);


delete [] frequency;

return 0;
}

最佳答案

一个地方你有可能导致崩溃的未定义行为:

在这里你分配fSize元素:

frequency = new int [fSize];

稍后您迭代它直到 fSize :

for (int i = 0; i <= fSize; i++) {

你应该改成i < fSize ,因为您的数组中没有 fSize 元素。 i <= dSize 也有同样的问题稍后的。应该是i < dSize .

顺便说一句。我不明白为什么只有大值才会导致代码崩溃,也许这只是 UB。

关于c++ - 为什么我的程序会因大值而不是小值而导致程序崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35095551/

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