首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c++中运行代码时,windows中出现奇怪的错误。

在c++中运行代码时,windows中出现奇怪的错误。
EN

Stack Overflow用户
提问于 2012-08-22 00:10:18
回答 3查看 102关注 0票数 1

我已经写了一些代码来解决c中的英国信息学奥林匹克问题1 (2012)。如果它对任何人有任何帮助,或者可能感兴趣,程序会找到一个数字的唯一素因数的乘积。如果数字是质数,则返回原始数字。

它的输入量应该达到1,000,000,而且在linux和mac上编译时也是如此。

由于某些原因,当它在windows上编译时(使用mingw编译器),它不适用于超过520558的输入!

这可能与声明一个520558个整数长度的数组有关,但我不知道如何纠正它。

任何帮助都将不胜感激

谢谢。

代码:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[]){
    printf("Please enter your input: ");
    int input;
    scanf("%d",&input);
    int numbers[input-2];
    for (int i=0;i<input-2;i++) {
        numbers[i] = i+2;
    }
    for (int i=0;i<input-2;i++) {
        if(numbers[i] == 0) {
            continue;
        }else{
            for (int j=(i+2)*2;j<input;j+=numbers[i]){
                numbers[j-2] = 0;
            }
        }
    }
    int product = 1;
    for (int i=0;i<input-2;i++) {
        if(numbers[i]!=0){
            if(input%numbers[i]==0) {
                product *= numbers[i];
            }
        }
    }
    if(product == 1){
        printf("%u",input); 
    }else{
        printf("%u",product);
    }
    printf("\n");
    // Get rid of this on mac and linuxs
    system("PAUSE");
    return 0;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-22 00:19:40

int numbers[input-2];

这将在堆栈上创建一个整数数组。堆栈的大小是有限的;这通常是几兆字节或更少的数量级上的2的幂。520558可疑地接近2^19,这表明堆栈区域为2Mb。

如果您正在处理如此大的数组,则应改用堆:

代码语言:javascript
复制
int * numbers = (int*)malloc((input-2)*sizeof(int)); 
. 
. 
. 
free(numbers); 
return 0;
票数 3
EN

Stack Overflow用户

发布于 2012-08-22 00:24:07

尝试用以下代码替换您的numbers声明:

代码语言:javascript
复制
int* numbers = (int *) malloc((input-2)*sizeof(int));

正如squiguy提到的,这将在堆上动态分配数组,从而避免您可能遇到的任何潜在堆栈问题。完成后,您还应该使用以下命令释放它:

代码语言:javascript
复制
free(numbers);
票数 2
EN

Stack Overflow用户

发布于 2012-08-22 00:19:16

最好在堆上而不是堆栈上分配numbers变量:

代码语言:javascript
复制
#define MAXNUMS 1000000
int numbers[MAXNUMS];

int main() {
...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12058951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档