|
0 / 0 / 0
Регистрация: 29.11.2015
Сообщений: 19
|
|||||||||||
Перевыделение памяти realloc07.03.2016, 15:56. Показов 3648. Ответов 5
Метки нет (Все метки)
Есть двумерный массив char **inpWords, в который я добавляю слова из файла, отсеивая пробельные символы. из файла считываю посимвольно. Перед добавлением в массив проверяю, если памяти не хватает, то расширяю ее с помощью realloc. Как я понимаю, в 25 строке не происходит увеличение памяти. Как следствие, в 19 строке при countWord=2 вылетает ошибка, т.к. происходит обращение к неразмеченной области памяти (Ошибка: EXC_BAD_ACCESS (code=1, adress=0x33). Что я делаю не так?
Только что доперло: проблема, видимо в том, что я создал указатели на массивы char*, а под сами массивы память не выделил. Тогда попутно вопрос такой: если есть массив char* mas, необходимо выполнить для него операцию free(mas). Можно передать указатель на массив в функцию и там освободить память?
0
|
|||||||||||
| 07.03.2016, 15:56 | |
|
Ответы с готовыми решениями:
5
Перераспределение памяти, realloc Ошибка при перераспределении памяти realloc
|
|
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
|
|||||||||||
| 07.03.2016, 16:53 | |||||||||||
Сообщение было отмечено Памирыч как решение
Решение
Вы не выделяли память под сами слова, после двух введенных слов. Добавлено через 23 минуты
0
|
|||||||||||
|
Вездепух
13202 / 6837 / 1822
Регистрация: 18.10.2014
Сообщений: 17,296
|
|
| 07.03.2016, 18:08 | |
|
Программа содержит еще одну классическую ошибку: результат 'getc ()' кладется в переменую типа 'char'. А надо бы 'int'.
1
|
|
|
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
|
|
| 07.03.2016, 19:23 | |
|
А как тогда? Тогда, чтобы исключить приведение типов, **inpWords тоже необходимо так же определять типа int.
И потом придется в цикле посимвольно печатать. А чем чревато передавать результат getc() в переменную типа char?
0
|
|
|
Вездепух
13202 / 6837 / 1822
Регистрация: 18.10.2014
Сообщений: 17,296
|
|
| 07.03.2016, 19:53 | |
|
Значение EOF, которое может возвращать функция getc(), в общем случае не принадлежит диапазону типа 'char'. Это "допонительное" значение. Поэтому результат getc() надо принимать в переменную типа 'int', проверять на равенство с EOF, и только после этого рассматривать, как 'char'. (После этого гарантируется, что возвращенное значение поместится в 'char'). Если ваша программа работает, то вам "повезло", но формально ваша программа некорректна именно по этой причине.
Исключать "приведение типа" и переобъявлять ваши массивы как 'int', разумеется, не надо? Зачем? Ничего вообще больше в коде менять не надо. Значение типа 'int' само преобразуется к типу 'char' при сохранении в массив. Вам об этом беспокоиться не нужно.
1
|
|
|
88 / 88 / 80
Регистрация: 25.08.2013
Сообщений: 337
|
|
| 07.03.2016, 19:56 | |
|
Ага, понял) Спасибо) Вспомнил, читал об этом, да))))
0
|
|
| 07.03.2016, 19:56 | |
|
Помогаю со студенческими работами здесь
6
Работа с кучей. Перевыделение памяти Перевыделение памяти в функции - динамический массив Динамические массивы структур и выделение (перевыделение) памяти
Выделение памяти malloc realloc Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|