Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 迭代器访问冲突的原因及解决方案_C++_Iterator - Fatal编程技术网

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