gpt4 book ai didi

c - 当使用更多内存时,C 中的程序崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 05:00:47 25 4
gpt4 key购买 nike

我必须做一个 C 语言的学校作业小程序,它将读取标准输入并打印一些标准输出。更具体地说,它是关于读取数字并对它们进行排序。

(这个可以跳过,只是为了看懂代码)输入的第一行应该确定会有多少行数字。第二行是下一行的数字数量。第三行是具体数字。第四行是下一行的数字数量,依此类推,直到达到 K 行数。限制是 0 < K <= 10(最多 10 个序列),每个序列最多可以包含 10.000.000 个数字,每个数字的值最多为 10.000.000

例子输入:

  1. 2 //这意味着会有2个数字序列(行)及其对应的ammount
  2. 3 //第一个数列有3个数
  3. 5 99912 45//第一个序列
  4. 6 //第二个数列有6个数
  5. 9489498 22131 0 521313 7988956 5//第二个序列

升级:

0 5 5 45 22131 99912 521313 7988956 9489498

所以我已经完成了一个工作程序,但它似乎在较高的值下不稳定。但是我无法确定程序何时何地失败。在我的计算机上,我已经测试了所有可能的最大值并在合理的时间内返回了正确的输出,但是在完成测试的学校服务器上它无法处理高值并失败。

有一件事,程序应该只使用 C,而不是 C++,但我不太确定它们之间的区别,因为我使用的是 C++ 编译器,所以我的代码可能不仅仅是原始 C。

我是 C 初学者,这对我来说就像“Hello world”,所以请您快速浏览一下代码并说明是什么导致了不稳定?谢谢

#include <stdio.h>
#include <stdlib.h>

int main(void) {
int k, n, i, y, x, index = 0;
int *numbers = (int*) malloc(100000000 * sizeof(int));
if(numbers == NULL){
exit(1);
}
scanf("%d", &k);
for (x = 0; x < k; x++) {
y = 0;
scanf("%d", &n);
while(scanf("%d", &i) > 0){
numbers[index++] = i;
if(++y == n){
break;
}
}
}
for(y = 0;y < index;y++){ //find and print all 0's, because later I will use 0 as a
//already used (printed) element in array and ignore it
if(numbers[y] == 0){
if(y == index-1){
printf("0");
}else{
printf("0 ");
}
}
}
int smallest, smallestIndex;
for(x = 0;x < index;x++){ //print all other numbers in ascending order
smallest = 0;
for(y = 0;y < index;y++){ //find current smallest number
if((numbers[y] < smallest || smallest == 0) && numbers[y] != 0){
smallest = numbers[y];
smallestIndex = y;
}
}
numbers[smallestIndex] = 0;
if(smallest > 0){
if(x == index-1){
printf("%d", smallest);
}else{
printf("%d ", smallest);
}
}
}
free(numbers);
numbers = NULL;
return 0;
}

最佳答案

根据您提供的信息,我认为这只是服务器上的资源限制。服务器内存不足,您的 malloc() 失败。我建议你调试或这样做:

if(numbers == NULL){
printf("malloc() failed\n");
exit(1);
}

关于c - 当使用更多内存时,C 中的程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12751026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com