c++ - 将宏作为 CString 引用传递
问题描述
我正在分析我的应用程序崩溃,我怀疑我当前的方法(下面粘贴的代码中的方法 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);
}
以下是我的问题:
- 我们可以将宏作为 CString 引用传递,还是应该使用宏创建 CString 初始化,然后传递 CString 的引用?
- 以上两种方法有什么区别?
- 方法 1 会导致应用程序崩溃吗?如果可以,有人可以解释一下吗?
解决方案
正如大家所说,问题的根源在不同的地方。感谢大家的快速响应。问题已重现,它帮助修复了崩溃。问题的根源是,正在将包含英文和日文字符的文件读取到 CStringA 变量中,同时尝试执行 makelower 它崩溃了。从字面上看,日文字符在 CStringA 中被转换为垃圾。CString makelower 是问题的根源。
推荐阅读
- android - 启动应用程序时应用程序崩溃
- shell - 使用 Sox 进行批处理
- python - Linux中的Selenium webdriver异常
- python-3.x - 套接字连接问题在两个套接字之间连接
- mobile - 每个用户在同一设备上使用一个 pouchDB,与单个 CouchDB 同步
- excel - 确定行值或选择一行中的第一个空白单元格
- mysql - 修复损坏的表时出现错误“不是 BASE TABLE”
- ngxs - 注销时重置应用程序状态
- c# - C#WPF将具有透明度的PNG复制到剪贴板
- composer-php - 让 PATH 存储库提供比 VCS 存储库更新的版本