Я обнаружил, что имел дело со случаем, когда массивы могут быть нулевыми ...
private double[] concat (double[]a,double[]b){
if (a == null) return b;
if (b == null) return a;
double[] r = new double[a.length+b.length];
System.arraycopy(a, 0, r, 0, a.length);
System.arraycopy(b, 0, r, a.length, b.length);
return r;
}
private double[] copyRest (double[]a, int start){
if (a == null) return null;
if (start > a.length)return null;
double[]r = new double[a.length-start];
System.arraycopy(a,start,r,0,a.length-start);
return r;
}
Та же ошибка. В качестве обходного пути я заменил
is_any_of(" ")
на
is_from_range(' ', ' ')
, который также мог бы быть немного более эффективным.
Я заметил, что ваш цикл изменяет длину строки, но не обновляет условие завершения цикла. Может ли это быть источником вашей проблемы?
sf::Uint32 stringSize = newLine.size();
for( sf::Uint32 insertPos = MAX_LINE_LENGTH;
insertPos < stringSize; insertPos += MAX_LINE_LENGTH )
{
newLine.insert( insertPos, "\n" );
// You were probably wanting to put this here..
insertPos++;
stringSize++;
}
Может иметь какое-то отношение к одной или нескольким из этих ошибок GCC:
Результаты поиска GCC bugzilla для «Предупреждение: индекс массива превышает границы массива»
Не все из них действительный, но есть и исправленные, если поискать вокруг:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37861
Так что я почти уверен, что что-то происходит там. Основываясь на комментариях, я бы попробовал скомпилировать без оптимизации и посмотреть, исчезнет ли она.
Я получил предупреждение о ложных границах, используя один из стандартных алгоритмов (std :: remove, я думаю) и передав параметры итератора:
myarray,
myarray + sizeof(myarray)/sizeof(*myarray)
, которые, я уверен, находятся в определенных пределах. Однако это было только в коде игрушек, так что я просто искал его. Если GCC действительно выдает хитрые предупреждения, вам просто нужно очень внимательно изучить свой код, пока он не будет исправлен.