Передача динамического массива как аргумент функции - C (СИ)

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

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

Вот кусок кода. Если разкомментировать вывод элементов массива на экран в main, то происходит ошибка сегментирования. Из-за того, что я неправильно передаю массив функции и он не изменился на самом деле и мы выходим за его границы? Как тогда правильно передавать динамический массив (он же сам по себе уже указатель)? Или в чем дело, подскажите пожалуйста. Пытался изменить объявление на
Листинг программы
  1. void readFile(const char* file, int ** array, int * size)
и передавать
Листинг программы
  1. readFile(inputFile, &array, &size);
но запутался в дальнейшем.
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void readFile(const char* file, int * array, int * size)
  4. {
  5. FILE* f = fopen(file, "rt");
  6. if (!f)
  7. {
  8. printf("Error! Can not open source file!\nExit!\n");
  9. exit(EXIT_FAILURE);
  10. }
  11. *size = 0;
  12. while ( !feof(f))
  13. {
  14. if (fgetc(f) == '\n')
  15. (*size)++;
  16. }
  17. array = (int * )malloc((*size) * sizeof(int));
  18.  
  19. rewind(f);
  20. int i = 0;
  21. for (; i < *size; ++i)
  22. {
  23. fscanf(f, "%d", &array[i]);
  24. }
  25. fclose(f);
  26.  
  27. }
  28. int main(int argc, char **argv)
  29. {
  30. if (argc < 4)
  31. {
  32. printf("Error! Not enought of arguments!\nExit!\n");
  33. exit(EXIT_FAILURE);
  34. }
  35. if (argc > 4)
  36. {
  37. printf("Error! Too many arguments!\nExit!\n");
  38. exit(EXIT_FAILURE);
  39. }
  40. const char* inputFile = argv[1];
  41. const char* outputFile = argv[2];
  42. int * array /*= NULL*/;
  43. int size = 0;
  44. readFile(inputFile, array, &size);
  45.  
  46. /*int i=0;
  47. for (; i < size; ++i)
  48. {
  49. printf("%d%s",array[i],"\n");
  50. }*/
  51. }

Решение задачи: «Передача динамического массива как аргумент функции»

textual
Листинг программы
  1. void readFile(const char* file, int ** array, int * size);
  2. и
  3. void readFile(const char* file, int * array, int * size)
  4. {

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

В данном коде представлена функция с именем readFile, которая считывает файл и заполняет массив целыми числами. Она принимает три аргумента:

  1. file - указатель на строку, содержащую имя файла, который нужно считать.
  2. array - указатель на массив, который будет заполнен считанными из файла числами.
  3. size - указатель на переменную, в которую будет записан размер массива. Список действий, выполняемых в функции readFile:
  4. Создание и инициализация переменных:
    • file - имя_файла
    • array - указатель на массив
    • size - указатель на переменную
  5. Открытие файла для чтения:
    • file - имя_файла
  6. Проверка успешности открытия файла:
    • Если файл не удалось открыть, то выводится сообщение об ошибке и программа завершается.
  7. Считывание данных из файла:
    • Чтение чисел из файла и запись их в массив array.
  8. Закрытие файла:
    • Закрытие файла после его чтения.
  9. Вычисление размера массива array:
    • Размер массива array равен количеству считанных чисел.
  10. Запись размера массива в переменную size:
    • size - указатель на переменную, в которую будет записан размер массива.
  11. Возврат в вызывающую функцию:
    • После выполнения всех действий функция возвращает управление в вызывающую функцию.

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


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

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

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

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

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

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