我遇到了错误:
紧急:运行时错误:索引超出范围
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;
}
答案 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
...