为什么我在构建std :: string时遇到此R6030错误?

时间:2013-12-16 11:07:12

标签: c++ windows string

大家好,谢谢你花时间看我的问题。 我正在制作这个程序的运行时出错,我把它缩小到一个

std::string str(id.Description, (sizeof(id.Description)/sizeof(id.Description[0])));

这是完整的功能

bool isItNvidia()
{
    IDirect3D9* pD3D9 = NULL;
    pD3D9 = Direct3DCreate9( D3D_SDK_VERSION );
    if(pD3D9)
    {
     UINT dwAdapterCount = pD3D9->GetAdapterCount();
    for( UINT iAdapter = 0; iAdapter < dwAdapterCount; iAdapter++ )
    {
        D3DADAPTER_IDENTIFIER9 id;
        ZeroMemory( &id, sizeof( D3DADAPTER_IDENTIFIER9 ) );
        pD3D9->GetAdapterIdentifier( iAdapter, 0, &id );

    //std::cout<< id.Description<<std::endl;
    /*
    wchar_t wtext[MAX_DEVICE_IDENTIFIER_STRING];
    std::mbstowcs(wtext, id.Description, strlen(id.Description)+1);
    LPWSTR ptr = wtext;
    MessageBox(NULL, ptr, L"nigg", MB_OK);
    */

        std::string str(id.Description, (sizeof(id.Description)/sizeof(id.Description[0])));
        std::string comp="NVIDIA";


        if(str.find(comp) != std::string::npos)
        {
            return true;
            Beep(300, 500);
        } 


    }
}
return false;

pD3D9->Release();
delete pD3D9;
}

您还需要d3d9.h和d3d9.lib文件。

我不知道为什么会这样做 id.Description是一个字符数组

如果有人可以提供帮助,我会非常感激。 感谢

2 个答案:

答案 0 :(得分:7)

只需使用std::string str(id.Description);

初始化字符串

说明:

可能会调用此构造函数,这不是您想要的:

basic_string( const basic_string& other, 
          size_type pos, 
          size_type count = std::basic_string::npos,
          const Allocator& alloc = Allocator() );

pos参数将导致垃圾地址。

答案 1 :(得分:0)

您收到错误,因为C Runtime(CRT)未正确初始化。请在此处查看问题的可能原因: http://msdn.microsoft.com/en-us/library/9ecfyw6c.aspx