Динамический массив, malloc. realloc - C (СИ)

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

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

Привет всем Пишу программу в С, нужно использовать динамический массив, одномерный, объявляю массив, далее пробовал массиву изменять длину при считывании новой строки, с помощью realloc, вылетает непонятная ошибка, о каких-то там dll... игрался игрался.. примеров штук 100 посмотрел -> не работает у меня, все время эта ошибка при старте попробовал потом по другому, не рационально но все же, сперва прочитать файл, посчитать кол-во строк, затем задать массиву длину и считать снова уже содержимое в массив malloc использую, длина не увеличивается массива, тип double вроде бы 8 баитное, проверяю длину массива, а она вообще 4.... я не могу понять что может быть вообще вот огрызки от программы
double *Ar; //сам массив
Ar = (double*) malloc(length*sizeof(double)); // пытаюсь задать длину
length - кол-во элементов считанных с файла, в данный момент у меня их 100, 100*8 должно быть 800 байт, а у меня в любом случае получается 4, даже тип меняю данных уже пробовал и с чаром и интом и каких, только нету, результат 4 мне не понятно что я сделал не так, этот пример взял из интернета из этого же форума и из рабочего примера, как там описывали

Решение задачи: «Динамический массив, malloc. realloc»

textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
int main()
{
    FILE *F = fopen("c:\\table.txt", "r");
    double r;
    double *Ar;
    int i = 0, laenge = 0;
    
    while(fscanf(F, "%lf", &r) == 1)
    {
        laenge++;
    }
 
    fclose(F);
    F = fopen("c:\\table.txt", "r");
 
    Ar = (double*)malloc(laenge*sizeof(double));
 
    while(fscanf(F, "%lf", &Ar[i]) == 1)
    {
        i++;
    }
    printf("%d\n", sizeof(Ar));
    fclose(F);
    getchar();
 
}

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

  1. Открывается файл c:\\table.txt для чтения.
  2. Создается переменная типа double для хранения числа из файла и переменная типа int для отслеживания количества элементов массива.
  3. В цикле while с помощью функции fscanf из файла считывается число и сохраняется в переменной r.
  4. Переменная laenge увеличивается на единицу.
  5. После окончания чтения файла, функция fclose закрывает файл, а функция fopen открывает его снова для чтения.
  6. С помощью функции malloc создается динамический массив типа double, размер которого равен laenge.
  7. В цикле while с помощью функции fscanf из файла считывается число и сохраняется в соответствующем элементе массива.
  8. Переменная i увеличивается на единицу.
  9. Выводится размер массива.
  10. Функция fclose закрывает файл.
  11. Программа ожидает ввода пользователя с помощью функции getchar.

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


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

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

10   голосов , оценка 3.9 из 5
Похожие ответы