Unique_Ptr структуры push_back в вектор другой структуры создает ошибку нарушения чтенияC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Unique_Ptr структуры push_back в вектор другой структуры создает ошибку нарушения чтения

Сообщение Anonymous »

Я создаю unique_ptr структуры Modifiers::Modifier.

Код: Выделить всё

enum class Types
{
PURE,
LAZY,
COMPUTED,
EVENTUAL,

TRANSIENT,
STATIC,
SAFE,
UNSAFE,

START,
};

struct Modifier
{
Types Type;
};
Затем я использую push_back, чтобы добавить его к вектору структурыshared_ptr под названием Token типа Tokens::Variable_Definition. Он преобразуется из структуры более высокого уровня с помощью std::static_pointer_cast
Я проверяю, является ли статическое приведение нулевым значением nullptr, но этого никогда не происходит.

Код: Выделить всё

struct Variable : public BaseToken, public Expressions::ContainsExpressions
{
std::vector Modifiers;
};

struct Variable_Definition : public Variable
{
std::string VariableName;
Types::Native VariableType;
};

Код: Выделить всё

...
std::shared_ptr Token = std::static_pointer_cast(ThisToken);
...

std::vector vec;

std::unique_ptr Modifier =  std::make_unique();

Modifier->Type = ModifierPair->second;

if (Modifier->Type == Modifiers::Types::PURE)
{
print("IS PURE");
}

print(Token->Type);
print(var);
print(Token->Modifiers.size());

Token->Modifiers = std::vector();
Token->Modifiers.push_back(std::move(Modifier));

print("Found modifier");
Я пытаюсь даже назначить совершенно новый вектор Токену->Модификаторам, и это вызывает ошибку

Код: Выделить всё

Unhandled exception thrown: read access violation.
_Val was 0xFFFFFFFFFFFFFFFF.
В отладчике Visual Studio для вектора существует несколько значений 0x0000....
Изображение

ПРИМЕЧАНИЕ. В некоторых случаях код работает гладко, и отладчик показывает правильные значения в векторе, в других случаях возникает ошибка чтения.
Я не верю, что токен имеет значение NULL, но почему-то вектор таков, поскольку иногда он находится в вывод, размер вектора - очень огромное число. (вероятно, ограничение на размер вектора)

Подробнее здесь: https://stackoverflow.com/questions/791 ... -read-viol
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»