0 / 0 / 0
Регистрация: 31.08.2015
Сообщений: 22
1

Realloc в функции

25.04.2018, 13:36. Показов 3062. Ответов 3
Метки нет (Все метки)

Есть функция
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void read_line(char *adress) {
    char temp = '1';
    unsigned long long int count = 0;
 
    adress = NULL;
 
    while ((temp != EOF) && (temp != '\n')) {
        adress = (char*)realloc(adress, ((count + 10)*sizeof(char)));
        temp = getchar();
        if ((temp != EOF) && (temp != '\n')) {
            adress[count] = temp;
            count++;
            if (count >= 18446740) {
                printf("Previsinaa max dlina");
                temp = '\n';
            }
 
        }
    }
 
    adress[count] = 0;
}
Есть main
C
1
2
3
4
5
6
7
8
9
10
11
12
13
...
    unsigned long long int oc;
    char *adress;
    unsigned long long int count;
 
    FILE *input;
    studlist stud_TStringList;
    // Ввод адресса файла сохранения
    printf("Enter the file address\n");
 
    read_line(&adress);
        ...
...
Ошибка тут:
C
1
 adress = (char*)realloc(adress, ((count + 10)*sizeof(char)));
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.04.2018, 13:36
Ответы с готовыми решениями:

Realloc внутри функции
Проблема заключается в следующем: Когда я первый раз попадаю в функцию addItem и делаю в ней...

Выделение памяти с помощью функции realloc
в общем задачка по сути своей вроде бы легкая, должна укладываться в 60 строчек, но что-то допереть...

Почему так себя ведёт программа? Функции: malloc(), realloc(), free()
Почему большинство значений в output 0 и несколько из значений не равно 0? /* *...

Динамическое выделение для массива структур. Программа вылетает без ошибок на использовании функции realloc
Здесь код: ссылка В массив структур нужно записать новый элемент, выделить для него память....

3
1131 / 812 / 248
Регистрация: 30.06.2015
Сообщений: 4,234
Записей в блоге: 44
25.04.2018, 13:59 2
Лучший ответ Сообщение было отмечено SlimRG как решение

Решение

Так нельзя делать:
C
1
adress = (char*)realloc(adress, ((count + 10)*sizeof(char)));
Это как бы основы, которые нужно знать чтобы не сесть в лужу. Если реаллок возвратит нуль, то будет потерян адрес исходного массива, а значит полностью утеряна информация, которая в том массиве лежала, что не есть гут, мягко говоря. правильней через временную переменную:
C
1
2
3
4
5
6
7
char* tmp;
if( ( tmp = (char*)realloc(adress, ((count + 10)*sizeof(char) )  ) == NULL ) 
    { 
        puts("Realloc error!"); 
        return EXIT_FAILURE; 
    } 
    adress = tmp;
1
Модератор
Эксперт CЭксперт С++
5107 / 4538 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
25.04.2018, 14:44 3
SlimRG, ошибка тут:
C++
1
read_line(adress);
0
0 / 0 / 0
Регистрация: 31.08.2015
Сообщений: 22
25.04.2018, 21:00  [ТС] 4
CoderHuligan-Спасибо! - помогло

liv - не катит, т.к. функция НЕ умеет возвращать массив, я заставил ее работать напрямую с переменной
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2018, 21:00
Помогаю со студенческими работами здесь

Realloc
Программа должна забивать массив command_comblock символами 'p', но она почему-то не выполняет...

Использование realloc
Доброго времени суток. Определен динамический массив, он вводится. Затем нужно увеличить размер...

Функция realloc
Есть такой фрагмент кода: /* поиск отрицательных элементов и их размещение в конце массива*/ ...

Только realloc
Не хочет работать программа(возвращает неправильные числа+проблема с выводом) Во вложении скрин...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru