ошибка сегментации — ошибка памяти с переполнением стека

Итак, я написал программу сортировки кучи на C ++, которая принимает массив значений типа double и размер массива, а затем сортирует его. Программа работает, однако, когда я пытаюсь передать массивы больше 1000, я получаю «Ошибка шины: 10». Я думаю, что это связано с тем, как распределяется память, однако я не могу найти решение.

    #ifndef _HEAPSORT_
#define _HEAPSORT_

void Heapsort(double arrayToSort[], int sizeOfArray);

void Heapsort(double arrayToSort[], int sizeOfArray)
{

//      Building Heap:
// ==========================

int halfSize = sizeOfArray-1 / 2;

for(int i = halfSize; i >= 0; i--){
double temp = arrayToSort[i];
int I1 = i, I2 = i+i;
do {
if( I2 < sizeOfArray - 1 && arrayToSort[I2+1] > arrayToSort[I2] ) { I2++; }
if( arrayToSort[I2] > temp ){
arrayToSort[I1] = arrayToSort[I2];
I1 = I2;
I2 = I1+I1;
} else {
I2 = sizeOfArray;
}
} while ( I2 < sizeOfArray );
arrayToSort[I1] = temp;
}

//      Sorting Heap:
// =========================

for(int i = sizeOfArray-1; i >= 2; i--){ // i is the number of still competing elements
double temp = arrayToSort[i];
arrayToSort[i] = arrayToSort[0]; // store top of the heap
int I1 = 0, I2 = 1;
do {
if((I2+1) < i && arrayToSort[I2+1] > arrayToSort[I2] ) { I2++; }
if(arrayToSort[I2] > temp ){
arrayToSort[I1] = arrayToSort[I2];
I1 = I2;
I2 = I1+I1;
} else {
I2 = i;
}
} while( I2 < i );
arrayToSort[I1] = temp;

}

double Temp = arrayToSort[1];
arrayToSort[1] = arrayToSort[0];
arrayToSort[0] = Temp;
}

#endif /* _HEAPSORT_ */

Любое понимание того, как я могу это исправить, будет с благодарностью.
Вот код, где я выделяю память.

#include <iostream>
#include "heapsort.h"#include "rmaset.h"#include "ranmar.h"#include "common.h"

using namespace std;

int main(void)
{
const int size = 1000;
struct Common block;

rmaset(block);

double array[size];

for(int i = 0; i < size; i++){
array[i] = ranmar(block);
}

Heapsort(array,size);return 0;
}

Это просто создает структуру, которая затем передается в функцию, которая инициализирует ее, а затем в другую функцию, которая заполняет ее случайными числами. Я тщательно проверил все остальные функции и уверен, что ошибка исходит от функции Heapsort.

1

Решение

В следующей строке int halfSize = sizeOfArray-1 / 2; правая сторона оценивается как sizeOfArray-(1 / 2), Целочисленное деление (1 / 2) результаты в 0 поэтому он инициализирует halfSize со значением sizeOfArray, Вы начинаете цикл с конца массива. Я думаю, что ты хотел сделать (sizeOfArray-1) / 2 вместо.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]