,所以我在C 中进行合并排序程序,该程序应该占用5个尺寸10、100、1000、10000和100000的尺寸,并告诉每个阵列大批。我能够很好地对所有数组进行排序,但是当我尝试制作合并排序类的第三个对象时,我遇到了堆栈溢出。我将合并排序类的前两个对象毫无问题,但是当我将Merge Sort类的第三个对象制作出来时,我会发现一个错误,认为存在堆栈溢出。当我调试程序时,它将我指向.asm
文件,并且由于我不知道汇编,我不确定该怎么想。过去,我遇到了这个问题,这是因为我忘了动态地将内存分配给数组。我回头看,我所有的数组都已动态分配,所以我不确定为什么会遇到这个错误。这是我的主要内容,我标记了与星号相关的错误。对任何帮助都表示赞赏,这是我在这里的第二个问题,所以不要毁了我:(
//main.cpp
int main(){
int* tenArray;
int* hundArray;
int* thouArray;
int* tenThouArray;
int*oneHundThouArray;
tenArray = new int[9];
hundArray = new int[99];
thouArray = new int[999];
tenThouArray = new int[9999];
oneHundThouArray = new int[99999];
srand((unsigned int)time(NULL));
//Create arrays filled with random numbers
for (int i = 0; i < ARRAY_TEN; i++) {
tenArray[i] = rand();
}
for (int i = 0; i < ARRAY_HUND; i++) {
hundArray[i] = rand();
}
for (int i = 0; i < ARRAY_THOU; i++) {
thouArray[i] = rand();
}
for (int i = 0; i < ARRAY_TEN_THOU; i++) {
tenThouArray[i] = rand();
}
for (int i = 0; i < ARRAY_ONE_HUND_THOU; i++) {
oneHundThouArray[i] = rand();
}
MergeSort tenSort;
MergeSort hundSort;
//******************************************************************
MergeSort thouSort;//When typed the program will give an error
//******************************************************************
//Here I am just calling my sort function from implementation file:
//sorting 10 array
tenSort.sort(tenArray, 0, ARRAY_TEN - 1);
cout << endl << "Comparisons = " << tenSort.getCount() << endl;
//sorting 100 array
hundSort.sort(hundArray, 0, ARRAY_HUND - 1);
cout << endl << "Comparisons = " << hundSort.getCount() << endl;
//****************************************************************
//sorting thousand array
thouSort.sort(thouArray, 0, ARRAY_THOU - 1);
cout << "comparison = " << thouSort.getCount() << endl;
//****************************************************************
}
GetCount看起来像这样:
//in implementation
int MergeSort::getCount() {
return count;
}
如果它有助于导致错误的ASM文件中的线路说:
test dword ptr[eax],eax ;probe page
Mergesort构造函数是否分配任何其他内存?实际上,您实际上在堆栈上的内存中耗尽了内存。该堆栈只能包含太多数据,并且多次宣布数十万个整数可能会增加很多。