reinterpret_cast and STATUS_ACCESS_VIOLATION
reinterpret_cast and STATUS_ACCESS_VIOLATION
在试验C++和reinterpret_cast
函数时,我试图将short
转换为string
,并得到了STATUS_ACCESS_VIOLATION异常。
short s = 32767;
short* s2 = &s;
string* test4 = reinterpret_cast<string*>(s2);
cout << "reinterpret_cast: " << *test4 << endl;
在我的理解中,尝试使用一段内存,该内存未分配给我的应用程序进程。
我怎样才能注意这种禁止内存访问的尝试?我怎样才能只重新诠释这件包含我的空头价值的作品?
你没有将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;
强制转换不会自动将一种数据类型转换为另一种数据类型。 reinterpret_cast
是一个特别强大和危险的操作,只有在深入了解相关数据类型的情况下才能使用。 我不会在这里详细介绍,但长短是,指向短的指针不能与reinterpret_cast
一起转换为指向字符串的指针。
流一样,这些类可以使用各种输入(包括短值)并将它们转换为字符串。
相关文章:
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- 为什么调试器引发"read access violation. this was nullptr"异常?
- Simulink "Access Violation"写入 C++ lambda 函数捕获列表中的 PWork 变量
- Qt QXmlStreamReader Access Violation
- 指向 std::unrodered_map 中元素的指针返回'Read access violation'
- 例外:'Access violation reading location'
- 我在发布模式下运行时收到"Access violation reading location"错误 - C++
- 如何修复我的 c++ 毕达哥拉斯三重查找器中的'access violation reading location'错误?
- 矩阵 - "Access violation writing location 0x00900B0C" - C++ 中的错误
- 如何修复此代码中的'Access violation reading location'
- 过载时出错 << "Exception thrown: read access violation.m.matrix was 0xCDDDCDDE."
- c++:链表错误" Access violation reading location"
- Q维吉特"access violation"
- System.UStrClr Access Violation
- msftedit "Access violation reading location 0x00000008"错误.dll SetWindowSub类中的RichEdit控件
- CreateBuffer 抛出一个"Access violation reading location"
- glMapBufferRange Access Violation
- 指针已初始化,但我有错误"Access violation reading location 0xCCCCCCCC".为什么?
- VC++ vector::p ush_back "Access Violation" in DLL
- "Read Access Violation: This was nullptr" 以为我分配正确...?