Ошибка "превышен лимит памяти" при сдаче программы на сайте Олимпиады - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйсте, помогите пожалуйста! Решил олимпиадную задачу, у меня на моем Ubuntu 14.04 + Geany компилируется и выводит правильный ответ, а на сайте пишет, что

превышен лимит памяти

. Программа легкая, выполняется за 0.001 секунды. Подозреваю, что ошибка - segmentation fault, т.к. пока делал программу пару раз выдавало, исправлял. Опции компиляторов: Мой: gcc -Wall -o "%e" "%f" -std=c99 На сервере: -O2 --std=gnu11 -m32 -lm
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(void){
  4. int tmp, n, d, res=0, i;
  5. int* arr;
  6. FILE* input;
  7. FILE* output;
  8. arr = (int*) malloc(n*sizeof(*arr));
  9. input=fopen("input.txt","r");
  10. output=fopen("output.txt","w");
  11. fscanf(input,"%d%d", &n, &d);
  12. for (i=0; i<n; i++){
  13. fscanf(input,"%d", &arr[i]);
  14. }
  15. //Сортировка массива пузырьком
  16. for(int c=0; c<(n-1); c++){
  17. for(int d=0; d<(n-c-1); d++){
  18. if(arr[d] > arr[d+1]){
  19. tmp=arr[d];
  20. arr[d]=arr[d+1];
  21. arr[d+1]=tmp;
  22. }
  23. }
  24. }
  25. //Ошибка происходит до этого момента, если код, идущий дальше вырезать, то все нормально.
  26. free(arr);
  27. fclose(input);
  28. fclose(output);
  29. return 0;
  30. }

Решение задачи: «Ошибка "превышен лимит памяти" при сдаче программы на сайте Олимпиады»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void) {
  5.     int tmp, n, d, res = 0, i;
  6.     int* arr;
  7.     FILE* input;
  8.     FILE* output;
  9.     input = fopen("input.txt", "r");
  10.     output = fopen("output.txt", "w");
  11.     if ((NULL == input) || (NULL == output))
  12.     {
  13.         perror("");
  14.         getchar();
  15.         return 0;
  16.     }
  17.     if (fscanf(input, "%d %d", &n, &d) == 2)
  18.     {
  19.         arr = (int*)malloc(n*sizeof(int));
  20.         if (NULL == arr)
  21.         {
  22.             printf("Failed to lock memory\n");
  23.             getchar();
  24.             return 0;
  25.         }
  26.         for (i = 0; i < n; i++)
  27.             if (fscanf(input, "%d", &arr[i]) != 1)
  28.             {
  29.                 printf("Error load 'arr[%d]' from input.txt\n", i);
  30.                 getchar();
  31.                 return 0;
  32.             }
  33.     }
  34.     else
  35.     {
  36.         printf("Error load 'n' or 'd' from input.txt\n");
  37.         getchar();
  38.         return 0;
  39.     }
  40.     //Сортировка массива пузырьком
  41.     for (int c = 0; c<(n - 1); c++) {
  42.         for (int d = 0; d<(n - c - 1); d++) {
  43.             if (arr[d] > arr[d + 1]) {
  44.                 tmp = arr[d];
  45.                 arr[d] = arr[d + 1];
  46.                 arr[d + 1] = tmp;
  47.             }
  48.         }
  49.     }
  50.     //Ошибка происходит до этого момента, если код, идущий дальше вырезать, то все нормально.
  51.     free(arr);
  52.     fclose(input);
  53.     fclose(output);
  54.     return 0;
  55. }

Объяснение кода листинга программы

  1. Программа считывает два числа (n и d) из файла input.txt
  2. Выделяет память под массив arr размером n*sizeof(int)
  3. Считывает n чисел из файла input.txt и сохраняет их в массиве arr
  4. Если произошла ошибка при считывании числа, выводится сообщение об ошибке и программа завершается
  5. Если не удалось выделить память под массив, выводится сообщение об ошибке и программа завершается
  6. Если не удалось считать n или d из файла, выводится сообщение об ошибке и программа завершается
  7. Массив arr сортируется пузырьком
  8. Выделяется память под массив arr освобождается
  9. Файлы input.txt и output.txt закрываются
  10. Программа возвращает 0, завершая свою работу

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.286 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы