繁体   English   中英

由于某种原因,我的代码中出现了 [json.exception.type_error.302] 。 我知道错误是什么意思,但我不知道哪里有问题

[英]I'm getting a [json.exception.type_error.302] for some reason in my code. I know what the error means but I don't know where there's a fault

我的代码检查了 JSON 文件中每个样本的值,并给出了排序比较的次数、memory 的数量以及排序发生所需的时间。 但由于某种原因,代码给我一个错误。 如果有人可以帮助我,我会很高兴。 由于某种原因,我的代码中出现了 [json.exception.type_error.302] 。 我知道错误是什么意思,但我不知道哪里有问题

确切地说,这是我得到的错误 - “libc++abi.dylib: terminating with uncaught exception of type 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;
}

单步执行代码,异常发生在哪一行? 如果您没有办法逐步完成,请在整个过程中添加一些std::cerr调用以查看失败的位置。 我会假设错误发生在其中一条push_back线上,很可能是第一条。 您有j <= arraysize ,这很可能超出范围,因此当您尝试访问jsonObject[sample][arraysize]时,这会导致错误。

此外,您可能只需要quick = merge = insertion = jsonObject[sample].get<std::vector<int>>() ,而不需要循环

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM