Почему выбивает на указанной строке?

173
26 ноября 2016, 19:06

Поясните мне мою ошибку в данной функции на выделение памяти. Как только доходит до строчки 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];
    }
}
Answer 1

Возможно, что для указателя 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 для этих указателей.

В функции используются непонятные "магические числа".

Лучше функцию написать таким образом. чтобы она имела дело только с одним указателем, и для каждого указателя вызывать ее отдельно.

READ ALSO
Некорректный вывод после чтения файла C++

Некорректный вывод после чтения файла C++

Добрый день! У меня имеется статический метод listOfStudents() который открывает текстовый файл и считывает оттуда мои данные

195
выводит неправильные значения

выводит неправильные значения

В чем ошибка?задание вычисление функции разложения в рядво внутреннем цикле значение суммы ТЕКСТ ЗАДАНИЯ

176
Как создавать ярлыки средствами С++, WinAPI

Как создавать ярлыки средствами С++, WinAPI

Пишу инсталлятор, который, как принято, должен создавать ярлык на рабочем столе и группу в меню ПускНаходил в сети много вариантов одной и той...

351
Считывание пробела

Считывание пробела

Добрый деньИзучаю инструкцию SWITCH

192