1215787625 发表于 2023-11-5 21:47:43

小白求助

#include <stdio.h>
#define MAX 600000
int main(void)
{
        int i,k,location;
        int array = {1};
       
        scanf("%d",&i);
        if (i == 0)
                printf("%d",1);
        else{
                for (int j = 1,m = 0;j <= i;j++){
                        array *= j;
               
                while (array / 10 > 0){
                        array++;
                        if (array >= 100){
                                array %= 10;
                                array++;
                        }
                        if (array >= 10)
                                array %= 10;
                        for (k = 1;k <= MAX;k++){
                                while (array / 10 > 0){
                                        array++;
                                        array /= 10;
                                        }
                                }
                        }
                }
                location = MAX;
                while (array[--location] != 0)
                        ;
                for (;location >= 0;location--)
                        printf("%d",array);
        }
       
        return 0;
}
有大佬能解释一下为什么MAX定义为500000可以输入,而定义成600000时就会直接结束程序吗?

isdkz 发表于 2023-11-5 21:48:00

在这段代码中,定义了一个长度为MAX的数组array。在定义为500000时,array的长度为500000,而在定义为600000时,array的长度为600000。

由于本题中的数组是在栈上分配的,而栈的大小是有限制的。当定义为600000时,数组长度超出了栈的限制,导致程序崩溃。而定义为500000时,数组长度没有超出栈的限制,所以程序可以正常运行。

解决方法是将数组改为在堆上分配,或者使用动态数组。

Mike_python小 发表于 2023-11-5 21:48:57

在这段代码中,MAX被定义为一个宏,它用来表示数组array的最大长度。在这个例子中,我们需要使用一个比较大的数组来存储阶乘的结果,因此需要定义一个足够大的MAX。

答案:

问题:为什么MAX定义为500000可以输入,而定义成600000时就会直接结束程序?

当MAX被定义为500000时,array数组的大小为500000,占用的内存空间为4*500000=2000000字节,即2MB。而在大多数操作系统中,一个进程可以使用的虚拟地址空间是有限制的,通常只有几GB到几十GB不等。当我们申请内存超过进程可用地址空间的时候,程序就会异常终止。

当MAX被定义为600000时,array数组的大小为600000,占用的内存空间为4*600000=2400000字节,即2.4MB,这已经超过了部分操作系统默认的可用地址空间大小,因此程序会直接结束。

解决这个问题的方法是使用动态内存分配,例如使用malloc()函数来动态分配内存,这样就可以避免内存不足的问题了。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 小白求助