set :: insert создает segfault 11: неверное чтение размера 4

Итак, вот мой вопрос. Что является причиной ошибки по-видимому несвязанного изменения в коде?

#include <iostream>
#include <stdio.h>
#include <set>
#include <vector>
#include <math.h>
std::set<int> atkin(int m){
int r=0; bool s[m+2]; std::set<int> set;
for(int i=0;i<m+2;++i)
s[i]=false;
s[2]=s[3]=true;
int xr=pow((m-1)/4,.5);
for(int x=1;x<=xr;++x){
int yr=pow(m-4*x*x,.5);
for(int y=1;y<=yr;++y) {
int n=4*x*x+y*y;
int nm=n%12;
if(nm==1||nm==5)s[n]=!s[n];
}
}
xr=pow((m-1)/3,.5);
for(int x=1;x<=xr;++x){
int yr=pow(m-3*x*x,.5);
for(int y=1;y<=yr;++y) {
int n=3*x*x+y*y;
int nm=n%12;
if(nm==7)s[n]=!s[n];
}
}
xr=pow(2*m/3,.5); //was xr=pow(m+1)/3,.5); <- this worked fine.
for(int x=1;x<=xr;++x){
int yr=pow(3*x*x-m-1,.5);
for(int y=1;y<=yr;++y) {
int n=3*x*x-y*y;
int nm=n%12;
if(x>y && nm==11)s[n]=!s[n];
}
}
for(int i=5;i<=pow(m,.5);++i){
if(s[i]){
int k=i*i;
while(k<=m) {
s[k]=false;
k+=i*i;
}
}
}
for(int i=2;i<=m;++i){
if(s[i]) {set.insert(i); printf("%03d ", i); if(++r%20==0) printf("\n");} //segfault directs here on gdb and valgrind
}
return set;
}

в чем дело? Я предполагаю, что это из-за большей стоимости xr, но я не вижу, как это связано с set.insert(i); также этот файл включается во второй, который вызывает atkin() У меня была эта проблема как на Windows 8, так и на Linux. Спасибо за вашу помощь, и мне жаль, если мой код вас бесит.

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector