Динамический массив, malloc. realloc - C (СИ)
Формулировка задачи:
Привет всем
Пишу программу в С, нужно использовать динамический массив, одномерный, объявляю массив, далее пробовал массиву изменять длину при считывании новой строки, с помощью realloc, вылетает непонятная ошибка, о каких-то там dll... игрался игрался.. примеров штук 100 посмотрел -> не работает у меня, все время эта ошибка при старте
попробовал потом по другому, не рационально но все же, сперва прочитать файл, посчитать кол-во строк, затем задать массиву длину и считать снова уже содержимое в массив
malloc использую, длина не увеличивается массива, тип double вроде бы 8 баитное, проверяю длину массива, а она вообще 4.... я не могу понять что может быть вообще
вот огрызки от программы
length - кол-во элементов считанных с файла, в данный момент у меня их 100, 100*8 должно быть 800 байт, а у меня в любом случае получается 4, даже тип меняю данных уже пробовал и с чаром и интом и каких, только нету, результат 4
мне не понятно что я сделал не так, этот пример взял из интернета из этого же форума и из рабочего примера, как там описывали
double *Ar; //сам массив Ar = (double*) malloc(length*sizeof(double)); // пытаюсь задать длину
Решение задачи: «Динамический массив, 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(); }
Объяснение кода листинга программы
- Открывается файл
c:\\table.txt
для чтения. - Создается переменная типа double для хранения числа из файла и переменная типа int для отслеживания количества элементов массива.
- В цикле while с помощью функции fscanf из файла считывается число и сохраняется в переменной r.
- Переменная laenge увеличивается на единицу.
- После окончания чтения файла, функция fclose закрывает файл, а функция fopen открывает его снова для чтения.
- С помощью функции malloc создается динамический массив типа double, размер которого равен laenge.
- В цикле while с помощью функции fscanf из файла считывается число и сохраняется в соответствующем элементе массива.
- Переменная i увеличивается на единицу.
- Выводится размер массива.
- Функция fclose закрывает файл.
- Программа ожидает ввода пользователя с помощью функции getchar.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д