|
1 / 1 / 0
Регистрация: 08.04.2012
Сообщений: 100
|
|
Выделение памяти для строки символов08.04.2012, 15:52. Показов 15665. Ответов 4
Метки нет (Все метки)
Нужно выделить память под массив указателей на строки, ввести текст построчно динамически выделяя память для каждой строки и записывая указатель в массив.
Ошибка в строке выделения памяти: Необработанное исключение типа "System.NullReferenceException" произошло в c7laba.exe Дополнительные сведения: Ссылка на объект не указывает на экземпляр объекта.
0
|
|
| 08.04.2012, 15:52 | |
|
Ответы с готовыми решениями:
4
Динамическое выделение памяти для строки Динамическое выделение памяти для строки |
|
|
||||||||||||||||||||||||||
| 08.04.2012, 16:45 | ||||||||||||||||||||||||||
|
что, сложно код в сообщение вставить.
Ты не выделил память под массив строк, и сразу стал выделять в цикле память для каждой строки надо так
1
|
||||||||||||||||||||||||||
|
1 / 1 / 0
Регистрация: 08.04.2012
Сообщений: 100
|
|
| 08.04.2012, 17:16 [ТС] | |
|
Спс большое ... все учту. Очистку памяти не вставлял потому что там у меня тоже была ошибка и код не компилировался. И про использование амперсанда можно подробнее? Когда его нужно вставлять. Почему в моем случае указатель уже есть ?
0
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 08.04.2012, 19:13 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
каждая переменная в программе расположена по своему адресу. Обычно мы обращаемся к ним по значению, например int a; a=5; Но когда мы передаём их по значению в качестве параметра функции, функция не может их изменить Например, напишем функцию получения половиы числа
Функция scanf работает по-другому. Она должна изменять значения переменных. Что для этого нужно? Передача параметров по адресу! Для работы с адресами в Си существуют специальный тип переменных - указатели. Они объявляются как обычная переменная того типа, на который они указывают, но только вот так int* p;//это указатель на int Предназначены они для хранения адресов переменных. Чтобы получить от какой-то переменной адрес используется оператор & Например
Он смог принести в нашу функцию адрес того реального a, оставшегося в главной функции, а не его копии, тем самым, мы смогли изменить переменную, не находясь в её области видимости. Этот приём и использует функция scanf("%d", &a); когда откуда-то из глубины stdio.h изменяет значение переменной в нашей программе, на то, что ввёл юзер. Теперь про строки и массивы строк и чтение строк и вывод строк. Строки в Си это массивы символов, то есть строку мы храним в массиве
То есть записи
равно как и
scanf("%s", stroka); без оператора & ??? Потому что stroka это уже адрес массива stroka[0] и не нужно брать адрес адреса! Теперь про динамические массивы. Часто случается, что мы не знаем, сколько будет в массиве элементов. Например, мы не знаем количество строк, которые введёт пользователь, и поэтому спрашиваем у него. А значит размер массива нам тоже неизвестен, у нас нет готового куска памяти размером 80*N Мы можем взять только указатель char* p; , который ни на что валидное не указывает. Для того чтобы, например, спросить у юзера сколько памяти выделить под строку, а затем создать массив этого размера можно использовать функцию malloc() В скобках надо указать количество байт, какое мы хотим выделить
После работы с динамическим массивом, память нужно освободить. Это крайне важно в больших программах, потому что в процессе работы куча будет заполняться, динамическими массивами, которые после окончания работы не освобождены, и находясь в куче не дают выделять новые куски памяти освобождается память функцией free(s); Теперь, что делать, если нужна не одна строка, а их массив нужно массив строк объявить как указатель на первую строку в массиве, а первая строка в массиве это указатель на первый символ в строке поэтому объявляем указатель на указатель char **p; выделяем массив из N строк как массив указателей
поэтому под них тоже надо выделить память в цикле
Удаляется память, выделенная malloc, как ты помнишь функцией free() но прежде чем делать free(p), надо освободить результат работы N штук маллоков, вызванных нами поэтому полная версия освобождения памяти выглядит так
1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
1 / 1 / 0
Регистрация: 08.04.2012
Сообщений: 100
|
|
| 09.04.2012, 19:36 [ТС] | |
|
Спасибо большое.
0
|
|
| 09.04.2012, 19:36 | |
|
Помогаю со студенческими работами здесь
5
Выделение и удаление памяти, выделенной для динамической строки Строки и символы, выделение памяти Динамическое выделение памяти под строки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|