Size: a a a

2021 March 15

CD

Constantine Drozdov in pro.cxx
Ofee
Я могу ошибиться, но здесь, всё же, нарушается strict aliasing rule, до тех пор, пока мы не сделаем так:
std::memcpy(
 static_cast<unsigned char*>(&b),
 static_cast<unsigned char*>(&a),
 sizeof b);
поскольку std::memcpy принимает void*, а не unsigned char*
Но это не точно, и как трактовать код с точки зрения стандарта, если "исправить" это — я не знаю
Кажется, у вас каша в голове
источник

AG

Andrey Glebov in pro.cxx
по идее каст к unsigned char * происходит уже внутри memcpy, а void * не мешает этому, так как вполне может указывать на любой объект
источник

O

Ofee in pro.cxx
Constantine Drozdov
Кажется, у вас каша в голове
Возможно, поскольку я не компетентен в этом вопросе — честно признался в начале, что могу ошибиться. Но увы, в контексте изначального диалога этот пример не доказывает и не опровергает ничего на мой взгляд, но ставит действительно интересный вопрос, ответ на который я не знаю
источник

k

koren in pro.cxx
Есть одна проблема связанная с C++. Думаю по скриншотам будет понятно о чём идёт речь
источник

k

koren in pro.cxx
А... Их невозможно тут постить
источник

IA

Ilia Abernikhin in pro.cxx
Да, опиши словами
источник

k

koren in pro.cxx
В общем. Есть такого вида код:
struct TranslationState {
   std::string hash;
   std::string last_frag_data_id;
   std::string color_attachment_id;
   std::string mask_id;
   std::vector<VarToReg> var_to_regs;
   bool is_maskupdate;
   bool is_fragment;
``
   TranslationState(std::string hash, bool is_fragment, bool is_maskupdate)
       : hash(hash)
       , last_frag_data_id({})
       , color_attachment_id({})
       , mask_id({})
       , var_to_regs({})
       , is_fragment(is_fragment)
       , is_maskupdate(is_maskupdate) {}
};

static std::string convert_gxp_to_glsl(const SceGxmProgram& program, const std::string& shader_hash, bool maskupdate) {
   TranslationState translation_state = TranslationState(shader_hash, program.is_fragment(), maskupdate);
   return {};
}

Он пытается освободить TranslationState но вылетает с эксепшеном read access violation _Pnext was 0xFFFFFFFFFFFFFFFF
источник

k

koren in pro.cxx
Из примечательного. Воспроизводится этот баг только в Debug билде в Visual Studio. На Release всё нормально
источник

AS

Anatoly Shirokov in pro.cxx
koren
В общем. Есть такого вида код:
struct TranslationState {
   std::string hash;
   std::string last_frag_data_id;
   std::string color_attachment_id;
   std::string mask_id;
   std::vector<VarToReg> var_to_regs;
   bool is_maskupdate;
   bool is_fragment;
``
   TranslationState(std::string hash, bool is_fragment, bool is_maskupdate)
       : hash(hash)
       , last_frag_data_id({})
       , color_attachment_id({})
       , mask_id({})
       , var_to_regs({})
       , is_fragment(is_fragment)
       , is_maskupdate(is_maskupdate) {}
};

static std::string convert_gxp_to_glsl(const SceGxmProgram& program, const std::string& shader_hash, bool maskupdate) {
   TranslationState translation_state = TranslationState(shader_hash, program.is_fragment(), maskupdate);
   return {};
}

Он пытается освободить TranslationState но вылетает с эксепшеном read access violation _Pnext was 0xFFFFFFFFFFFFFFFF
так студия же тебе и место показывает, где валится
источник

k

koren in pro.cxx
Anatoly Shirokov
так студия же тебе и место показывает, где валится
Проблема в том, что она валится на фантомном объекте, которого нет нигде кроме как на Dispose
источник

k

koren in pro.cxx
Она пытается освободить некий std::vector<int>, которого и в помине нет в коде
источник

AS

Anatoly Shirokov in pro.cxx
koren
Проблема в том, что она валится на фантомном объекте, которого нет нигде кроме как на Dispose
ну, похоже на наведенную ошибку. может где-т память расстреливаешь или объект переданный по ссылке уничтожается раньше. вообщем, пробуй выйти на минимальный пример, на котором воспроизводится проблема.
источник

YS

Yaroslav Syrytsia in pro.cxx
koren
В общем. Есть такого вида код:
struct TranslationState {
   std::string hash;
   std::string last_frag_data_id;
   std::string color_attachment_id;
   std::string mask_id;
   std::vector<VarToReg> var_to_regs;
   bool is_maskupdate;
   bool is_fragment;
``
   TranslationState(std::string hash, bool is_fragment, bool is_maskupdate)
       : hash(hash)
       , last_frag_data_id({})
       , color_attachment_id({})
       , mask_id({})
       , var_to_regs({})
       , is_fragment(is_fragment)
       , is_maskupdate(is_maskupdate) {}
};

static std::string convert_gxp_to_glsl(const SceGxmProgram& program, const std::string& shader_hash, bool maskupdate) {
   TranslationState translation_state = TranslationState(shader_hash, program.is_fragment(), maskupdate);
   return {};
}

Он пытается освободить TranslationState но вылетает с эксепшеном read access violation _Pnext was 0xFFFFFFFFFFFFFFFF
valgrind ?
источник

k

koren in pro.cxx
Yaroslav Syrytsia
valgrind ?
Что?
источник

YS

Yaroslav Syrytsia in pro.cxx
koren
Что?
Имею ввиду, проверить этот кейс через valgrind
источник

k

koren in pro.cxx
Yaroslav Syrytsia
Имею ввиду, проверить этот кейс через valgrind
Не знаком с ним. От слова вообще
источник

ПК

Побитый Кирпич... in pro.cxx
Boris Usievich
Видимо можно, но без constexpr это не нужно, а с constexpr memcpy не скомпилируется
Зато bit_cast скомпилируется
источник

YS

Yaroslav Syrytsia in pro.cxx
koren
Не знаком с ним. От слова вообще
А, увидел чуть ниже. Вам нужно под винду. ЕМНИП, он только под линуксы есть. Жаль
источник

ПК

Побитый Кирпич... in pro.cxx
Yaroslav Syrytsia
А, увидел чуть ниже. Вам нужно под винду. ЕМНИП, он только под линуксы есть. Жаль
под винду есть Asan
источник

IZ

Ilia Zviagin in pro.cxx
koren
Из примечательного. Воспроизводится этот баг только в Debug билде в Visual Studio. На Release всё нормально
источник