Вы не преобразовывали short
в string
; вы берете адрес short
, а затем пытаетесь получить доступ к памяти по этому адресу, как если бы он содержал string
, чего нет.
К счастью, в вашем случае это привело к тому, что некоторые случайные фрагменты данных интерпретировались как недопустимый указатель, и поэтому вы получили ошибку нарушения доступа. Если там что-то было похоже на правильную строковую структуру, тогда могут возникнуть всевозможные странности.
Как я могу следить за такими попытками доступа к запрещенной памяти?
Не используйте reinterpret_cast
для преобразования между указателями на несвязанные типы и ожидайте, что переопределенное значение укажет на действительный объект; и не используйте его вообще, если вы точно не знаете, что с ним делаете.
Как я могу переосмыслить только этот кусок, который содержит мое короткое значение?
Если вы хотите, чтобы преобразовать число в строку, то вы можете использовать строковый поток:
std::ostringstream stream;
stream << s;
std::cout << "formatted with a stringstream: " << stream.str() << std::endl;
или, если вы используете C++ 11, то есть стандартные функции для преобразование чисел в строки:
std::string string = std::to_string(s);
std::cout << "converted with to_string: " << string << std::endl;
использовать «static_cast», когда это возможно. – ApprenticeHacker
Просто прекратите отливку –