Мой код просматривает значения каждой выборки в файле JSON и выдает количество сравнений сортировки, объем памяти и время, необходимое для выполнения сортировки. Но по какой-то причине код выдает ошибку. Хотелось бы, чтобы кто-нибудь помог мне. Я получаю [json.exception.type_error.302] по некоторым причинам в моем коде. Я знаю, что означает ошибка, но я не знаю, где есть ошибка
Если быть точным, это ошибка, которую я получаю - "libc ++ abi.dylib: завершение с неперехваченным исключением типа nlohmann:: detail :: type_error: [json.exception.type_error.302] тип должен быть числом, но равен нулю "
#include <iostream>
#include <fstream>
#include "json.hpp"
#include "mergesort.h"
#include "insertionsort.h"
#include "quicksort.h"
#include <ctime>
#include <iomanip>
int main(int argc, char* argv[]) {
std::ifstream file;
file.open(argv[1]);
nlohmann::json jsonObject;
if (file.is_open()) {
file >> jsonObject;
} else {
std::cout << "Invalid Argument" << std::endl;
}
clock_t mergeTime, quickTime, insertTime;
extern int insertMemAccesses, insertCompare, mergeMemAccesses, mergeCompare, quickCompare, quickMemAccesses;
// std::cout << jsonObject;
// nlohmann::json jsonOutput;
std::cout << "Sample,InsertSortTime,InsertionSortCompares,InsertionSortMemaccess,MergeSortCompares,MergeSortMemaccess,QuickSortTime,QuickSortCompares,QuickSortMemaccess";
int arraysize = jsonObject["metadata"]["arraySize"];
int numsamples = jsonObject["metadata"]["numSamples"];
for (int i = 0; i <= numsamples; i++) {
std::string sample;
if (i < 9) {
sample = "Sample0" + std::to_string(i+1);
} else {
sample = "Sample" + std::to_string(i+1);
}
std::vector<int> insertion;
std::vector<int> merge;
std::vector<int> quick;
for(int j = 0; j <= arraysize; j++){
insertion.push_back(jsonObject[sample][j]);
merge.push_back(jsonObject[sample][j]);
quick.push_back(jsonObject[sample][j]);
}
insertTime = clock();
InsertionSort(&insertion);
insertTime = clock() - insertTime;
insertTime = ((unsigned long)insertTime)/CLOCKS_PER_SEC;
mergeTime = clock();
MergeSort(&merge);
mergeTime = clock() - mergeTime;
mergeTime = ((unsigned long)mergeTime)/CLOCKS_PER_SEC;
quickTime = clock();
QuickSort(&quick);
quickTime = clock() - quickTime;
quickTime = ((unsigned long)quickTime)/CLOCKS_PER_SEC;
std::cout<<sample<<",";
printf("%.6lu,%d,%d,%.6lu,%d,%d,%.6lu,%d,%d\n",insertTime,insertCompare,insertMemAccesses,mergeTime,mergeCompare,mergeMemAccesses,quickTime,quickCompare,quickMemAccesses);
insertCompare = 0;
insertMemAccesses = 0;
mergeCompare = 0;
mergeMemAccesses = 0;
quickCompare = 0;
quickMemAccesses = 0;
}
return 0;
}