我不确定为什么索引超出范围错误

时间:2019-10-09 19:09:27

标签: go indexoutofrangeexception

我遇到了错误:

紧急:运行时错误:索引超出范围

goroutine 7 [运行中]: main.start(0xc0000540e0,0x8,0xc0000542a0,0x63,0x1,0xc00249a0c0)

当我尝试在某些日志(而不是全部日志)上运行程序时。

导致此错误的代码似乎是:

#include <iostream>
#include <vector>
#include <array>
#include <thread>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;

const size_t size = 10;
const size_t numThreads = 10;

double threadMax[numThreads] = {};

void getMax(int idx, double *A){
    threadMax[idx] = *max_element(A, A + size);
}

int main(){
    srand(time(nullptr));

    vector<double> A(size);
    array<thread, numThreads> t;

    //Assign random values to array
    generate_n(A.begin(), size, [](){ return double(rand() % 100); });
    /* or:
    for(double &d : A){
        d = double(rand() % 100);
    }
    */

    //create Threads
    for(int j = 0; j < numThreads; ++j){
        cout << A[j] << "    " << j << "\n";
        t[j] = thread(getMax, j, A.data());
    }

    //join threads
    for(thread &thd : t){
        thd.join();
    }

    //Find Max from all threads
    double max = *max_element(threadMax.begin(), threadMax.end());
    cout << max;

    return 0;
}

1 个答案:

答案 0 :(得分:3)

首先,切勿遗漏错误!

要回答您的问题:如果lines为空(len(lines) == 0),那么len(lines)-1将是-1,这可能会触发您的错误。

类似地,如果lines为空,则lines[0]也超出范围,但前一行会出现紧急情况,因此您不会在这里结束。

我正在猜测lines是否为空,应该跳过整个代码(无需进行分析),因此首先检查一下。例如:

if len(lines) == 0 {
    return
}

// There are lines, it's safe to index it with 0 and len(lines)-1

...