Статистический массив в С++ ведет себя неадекватно
Хотелось бы знать, как в С++ объявлять глобальные массивы в функции main? Код мой программы такой:
int factorize(long long x) {
static long* prime;
long index = 0, n = prime[index];
while (n * n <= x) {
// ...
};
int main() {
long* prime = (long*) malloc(51100000);
// ....
};
Когда программа доходит до строки "n = prime[index]", получается segmentation fault.
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
static long* prime; в функции factorize и long*prime в main — две очень большие разницы...
Для языка С:
int factorize(long long x) {
static long* prime = NULL;
if (prime == NULL) prime = malloc(51100000);
long index = 0, n = prime[index];
while (n * n <= x) {
// ...
};
Как-то так (не знаю, точно ли вам нужна именно такая память...). malloc будет вызван один раз, при первом обращении к функции factorize (хотя, если вызов будет неуспешен, то будет вызываться при каждом вызове :)).
Да, о терминологии... Здесь "статическая" переменная-указатель prime, но не массив, память для которого выделяется динамически.
P.S. В С++ можно
static long* prime = NULL;
if (prime == NULL) prime = malloc(51100000);
заменить на
static long* prime = (long*)malloc(51100000);