Передача макроса в качестве ссылки CString - PullRequest
0 голосов
/ 12 декабря 2018

Я анализирую сбой в моем приложении и подозреваю, что мой текущий подход (подход 1 в приведенном ниже коде) может привести к сбою, но не уверен.Я вставил ниже мой код для справки.Сбой не воспроизводится внутри компании и не создает дампов.

#define SAMPLE_STRING L"Hello world"

class CFoo
{
    std::map <CString, CString> m_map;
public:
    void SetMyString(__in const CString&  csParam)
    {
        CString csKey(L"Mykey");
        m_map[csKey] = csParam;
    }
};
int main()
{
    //approach 1
    CFoo obj;
    obj.SetMyString(SAMPLE_STRING);


    //approach 2
    CFoo obj;
    CString csMystr(SAMPLE_STRING);
    obj.SetMyString(csMystr);

}

Ниже приведены мои вопросы:

  1. Можем ли мы передать макрос как ссылку на CString или создать CStringинициализировать с помощью макроса и затем передать ссылку на CString?
  2. В чем разница между двумя вышеупомянутыми подходами?
  3. Может ли сбой приложения при подходе 1?Если это возможно, может кто-нибудь объяснить, как?

1 Ответ

0 голосов
/ 21 декабря 2018

Как все говорили, источник проблемы был в другом месте.Спасибо всем за быстрый ответ. Проблема была воспроизведена, и это помогло исправить ошибку.Источником проблемы было чтение файла с английскими и японскими символами в переменную CStringA, при попытке сделать makelower, он потерпел крах.Буквально японские символы были преобразованы в мусор в CStringA.CString makelower был источником проблемы.

...