Выход из процесса с возвращаемым значением 3221225725 - PullRequest
0 голосов
/ 18 апреля 2020

Я хочу выполнить сортировку dualPivotQuick с размером массива более 100000, и ошибка возврата моего компилятора с возвращаемым значением 3221225725 Код работает нормально с размером массива менее 10000. Это неправильное распределение памяти или проблема в массиве, но это использовать правильный тип данных long long. что мне делать? спасибо за помощь !!

#include <cstdlib>
#include <windows.h>
#include "psapi.h"
#include "ProcessThreadsApi.h"

#define SIZE 100000

using namespace std;   

void swap(long long* a, long long* b){  
    int temp = *a;  
    *a = *b;  
    *b = temp;  
}  

int partition(long long* arr, int low, int high, long long* lp){  
    if (arr[low] > arr[high])  
        swap(&arr[low], &arr[high]);  
    int j = low + 1;  
    int g = high - 1, k = low + 1;
    int p = arr[low], q = arr[high];  
    while (k <= g) {  
        if (arr[k] < p) {  
            swap(&arr[k], &arr[j]);  
            j++;  
        }  
        else if (arr[k] >= q) {  
            while (arr[g] > q && k < g)  
                g--;  
            swap(&arr[k], &arr[g]);  
            g--;  
            if (arr[k] < p) {  
                swap(&arr[k], &arr[j]);  
                j++;  
            }  
        }  
        k++;  
    }  
    j--;  
    g++;  
    swap(&arr[low], &arr[j]);  
    swap(&arr[high], &arr[g]);  
    *lp = j; 
    return g;  
}  

void QuickSort(long long* arr, int low, int high)  {  
    if (low < high)  {  
        long long lp, rp;  
        rp = partition(arr, low, high, &lp);  
        QuickSort(arr, low, lp - 1);  
        QuickSort(arr, lp + 1, rp - 1);  
        QuickSort(arr, rp + 1, high);  
    }  
}  

int main() {  
    PROCESS_MEMORY_COUNTERS_EX pmc;
    GetProcessMemoryInfo(GetCurrentProcess(),(PROCESS_MEMORY_COUNTERS*)&pmc,sizeof(pmc));
    SIZE_T virtualmem = pmc.PrivateUsage;
    long long *arr;
    arr = (long long*)malloc(SIZE*sizeof(long long));  
    int ctr = 0;
    for(int i=SIZE;i>0;i--)
        arr[i] = i;
    QuickSort(arr,0,SIZE);  
    cout << "Total Memory Used : " << (double)virtualmem/1024/1024 << " Mb";
    return 0;
}
...