Мы работаем над проектом, который требует от нас создания и управления кучей в C ++. Мы используем массив символов для хранения нашей памяти (в проекте не используется «new»). У нас есть функция allocate, которая должна возвращать указатель типа T. У нас есть пара типов def и шаблон, чтобы помочь нам
template <typename T>
typedef T value_type;
typedef value_type* pointer;
Поэтому нам нужно вернуть «указатель». Вопрос:
Как мы можем вернуть «указатель», который указывает на определенный индекс в нашем массиве символов?
Скажите, если начало выделенного блока указывает на адрес 5, а имя типа T — int. Как мы можем сделать указатель int (используя наш «указатель»), который указывает на индекс массива в 5?
Мы пытались использовать reinterpret_cast <pointer> (a[index])
привести индекс массива к указателю. Дополнительно мы попробовали reinterpret_cast <pointer> (a + index)
чтобы получить указатель массива, переместите его вверх по индексу и приведите его к нашему указателю типа. Каждый раз указатель указывает на что-то вроде «0xfffffffffff» или группу f, за которыми может следовать 0c или какое-то случайное значение, что приводит к ошибке сегментации, когда мы разыменовываем ее позже в программе (например, в функции конструкции).
Спасибо!
редактировать массив «а» наш массив символов
Я думаю, что мы поняли это. Мы имеем:
reinterpret_cast <pointer> (a[index])
Что даст нам указатель индекса массива (в основном указатель из значение, а не указатель в ценность).
Мы изменили это на
reinterpret_cast <pointer> (&a[index])
Что даст нам указатель на индекс массива (в основном указатель в значение, а не из Значение). Извините, если это тонкое использование «из» и «к» не делает с тех пор. Я полагаю, это разница между
int a = 5
int* k = &a
против
int* k = a //even though this wouldnt compile
Других решений пока нет …