C++ 迭代器访问冲突的原因及解决方案
为什么试图从迭代器中输出C++ 迭代器访问冲突的原因及解决方案,c++,iterator,C++,Iterator,为什么试图从迭代器中输出TCHAR[]会导致访问冲突?我如何纠正这一点并仍然使用迭代器?我不明白出了什么问题 struct FileInfo { TCHAR path[MAX_PATH]; }; void iter() { std::vector<FileInfo> v; for (int i = 0; i < 5; i++) v.push_back({ _T("abc") }); for (int i = 0; i &l
TCHAR[]
会导致访问冲突?我如何纠正这一点并仍然使用迭代器?我不明白出了什么问题
struct FileInfo
{
TCHAR path[MAX_PATH];
};
void iter()
{
std::vector<FileInfo> v;
for (int i = 0; i < 5; i++)
v.push_back({ _T("abc") });
for (int i = 0; i < v.size(); i++) {
OutputDebugString(_T("Ok "));
OutputDebugString(v[i].path);
OutputDebugString(_T("\n"));
}
for (auto it = v.begin(); it != v.end(); it++){
OutputDebugString(_T("Bad "));
OutputDebugString((LPTSTR)*it->path); // CAUSES runtime error here
OutputDebugString(_T("\n"));
}
}
struct FileInfo
{
TCHAR路径[最大路径];
};
void iter()
{
std::向量v;
对于(int i=0;i<5;i++)
v、 向后推({u T(“abc”)});
对于(int i=0;ipath);//在此处导致运行时错误
OutputDebugString(_T(“\n”));
}
}
*it->path
的计算结果为TCHAR
,而不是TCHAR*
将TCHAR
强制转换为LPTSTR
不正确。将TCHAR*
投射到LPTSTR
即可
您可以使用:
OutputDebugString((LPTSTR)it->path);
或
*it->path
的计算结果为TCHAR
,而不是TCHAR*
将TCHAR
强制转换为LPTSTR
不正确。将TCHAR*
投射到LPTSTR
即可
您可以使用:
OutputDebugString((LPTSTR)it->path);
或
程序崩溃,并显示以下消息: test.exe中0x778180E0(ntdll.dll)处未处理的异常:0xC0000005: 访问冲突读取位置0x00000061 有趣的是:
0x00000061
是字符a
的ascii值,它是要输出的字符串的第一个字符。通过这样做:
*it->path
您将在path
中获得字符串的第一个字符。那么当你这么做的时候
(LPTSTR)*it->path
将字符串的第一个字符强制转换为指针。因此出现错误:读取位置0x00000061
程序崩溃,并显示以下消息:
test.exe中0x778180E0(ntdll.dll)处未处理的异常:0xC0000005:
访问冲突读取位置0x00000061
有趣的是:0x00000061
是字符a
的ascii值,它是要输出的字符串的第一个字符。通过这样做:
*it->path
您将在path
中获得字符串的第一个字符。那么当你这么做的时候
(LPTSTR)*it->path
将字符串的第一个字符强制转换为指针。因此出现错误:读取位置0x00000061