Поясните мне мою ошибку в данной функции на выделение памяти.
Как только доходит до строчки numb[i] = new char[50]; - сразу ошибка и в отладчике пишет что чтение памяти невозможно.
**cont i **numb абсолютно две идентичные переменные (в дальнейшем это должна быть телефонная книга). Один массив отвечает за имена, второй за номера
void Memory(char**&cont, char**&numb, int q)
{
cont = new char*[q];
for (int i = 0; i < 2; i++)
{
cont[i] = new char[50];
}
for (int i = 0; i < 2; i++)
{
numb[i] = new char[50];
}
}
Возможно, что для указателя numb вы забыли выделить память, как, например
numb = new char*[q];
Ваша функция могла бы выглядеть следующим лобразом
void Memory( char ** &cont, char ** &numb, int q )
{
cont = new char *[q];
for ( int i = 0; i < q; i++ )
{
cont[i] = new char[50];
}
numb = new char *[q];
for (int i = 0; i < q; i++)
{
numb[i] = new char[50];
}
}
Хотя интерфейс этой функции очень неясный. Например, могут ли указатели, переданные в функцию, уже указывать на выделенную ранее память? То есть должен ли в начале вызываться оператор delete для этих указателей.
В функции используются непонятные "магические числа".
Лучше функцию написать таким образом. чтобы она имела дело только с одним указателем, и для каждого указателя вызывать ее отдельно.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники