社区
C++ 语言
帖子详情
std::string 分配内存出错
zhihuizhilv
2010-03-14 08:19:41
自己的一个小程序,使用std::string ,创建一个对象时,直接赋值一个字符串常量,运行时经常发送内存错误。出错后,查看调用堆栈,居然是这个赋值语句造成的。真是郁闷。还有同仁遇到这种问题吗?
代码:
#ifdef _UNICODE
#define tstring wstring
#else
#define tstring string
#endif
tstring strOut = _T("正在下载更新文件");
//注:编译时没有使用_UNICODE
...全文
433
8
打赏
收藏
std::string 分配内存出错
自己的一个小程序,使用std::string ,创建一个对象时,直接赋值一个字符串常量,运行时经常发送内存错误。出错后,查看调用堆栈,居然是这个赋值语句造成的。真是郁闷。还有同仁遇到这种问题吗? 代码: #ifdef _UNICODE #define tstring wstring #else #define tstring string #endif tstring strOut = _T("正在下载更新文件"); //注:编译时没有使用_UNICODE
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhihuizhilv
2010-03-14
打赏
举报
回复
问题解决了,是由于std::string 的共享内存机制在多线程下造成的。例如:
string str1 = "fdsfds";
string str2 = str1;
这个时候,虽然是两个对象,但是他们的实际数据内存是相同的。
在多线程的情况下,string考虑不周,没有做好多线程同步,会造成内存问题。
我的解决办法是,当一个对象可能被其他线程使用时,就避免它与别的对象共享内存:
str2 = str1.c_str();
经简单测试,问题貌似被解决了。
参考资料:
http://blog.csdn.net/wjun_8452/archive/2010/01/12/5182179.aspx
白云飘飘飘
2010-03-14
打赏
举报
回复
估计是前面的代码错误破坏了strOut变量
kingstarer
2010-03-14
打赏
举报
回复
一般是由于内存越界造成的
即在这行代码之前有其它代码操作内存时越界 当时没有立即出错 而导致后面代码出错了
耍宝王
2010-03-14
打赏
举报
回复
[Quote=引用 4 楼 zhihuizhilv 的回复:]
不行吧。我的那段代码的意思是如果预定义了_UNICODE,就用wstring,否则用string.这个没有错的。
[/Quote]
是的,而我的那段代码的意思是,如果预定义了 _UNICODE 或者 UNICODE 宏,就用wstring,否则用string
#if defined(UNICODE) || defined(_UNICODE)
#define tstring wstring
#else
#define tstring string
#endif
zhihuizhilv
2010-03-14
打赏
举报
回复
[Quote=引用 3 楼 pgplay 的回复:]
你把#ifdef _UNICODE 改成 #if defined(UNICODE) || defined(_UNICODE) 试试
[/Quote]
不行吧。我的那段代码的意思是如果预定义了_UNICODE,就用wstring,否则用string.这个没有错的。
耍宝王
2010-03-14
打赏
举报
回复
你把#ifdef _UNICODE 改成 #if defined(UNICODE) || defined(_UNICODE) 试试
arong1234
2010-03-14
打赏
举报
回复
另外一种可能就是多线程情况没用并发控制
arong1234
2010-03-14
打赏
举报
回复
应该不是这里的代码引起的错误
看看
http://blog.vckbase.com/arong/archive/2009/12/30/40598.html
std
::
string
vs C字符串:性能对比实测
性能优势在大多数常见操作中性能优于C风格字符串,尤其是在拼接、查找和子字符串操作中。安全性自动管理内存,减少了内存泄漏和越界访问的风险。易用性提供了丰富的成员函数,简化了字符串操作的复杂性。对于现代C++开发,建议优先使用,除非有特殊的性能或兼容性需求。如果你对字符串处理性能优化感兴趣,可以尝试在InsCode(快马)平台上运行类似的测试程序,体验一键部署的便捷性。平台的实时预览和调试功能也能帮助你快速验证代码的性能表现。
c++的
String
详解
是什么?是 C++ 标准库中定义的一个类模板对于char类型的特化别名。这意味着是一个管理字符序列的类,它自动处理内存分配、释放、以及各种字符串操作。头文件:使用必须包含<
string
>头文件。设计哲学:遵循 RAII(资源获取即初始化)原则。字符串所需的内存由类的构造函数自动分配,并由析构函数自动释放,用户无需手动newdelete,避免了内存泄漏的风险。与 C-style 字符串的区别特性char[]orchar*内存管理手动(易
出错
,内存泄漏/越界)自动(安全)长度获取strlen()
关于
std
::
string
的使用问题
项目中涉及图片的加载以及存储,直接从一个二进制文件中通过偏移量读取图片的数据,然后把图片二进制数据维护在内存里,当初为了方便,而且征求老大的意见结果就直接使用
std
::
string
来维护这些图片的数据。总的来说就是fread文件数据到
string
::data(),然后在绘制的时候创建出位图句柄,最后再把
string
::data()二进制数据直接fwrite到文件。一开始各种测试好像没问题,而且老大
linux 共享内存
出错
,共享内存的
std
::
string
给出了分段错误(linux)
我目前正在尝试在Linux上的2个进程之间的共享内存中放置结构.我没有问题共享bool或int但是当尝试共享字符串时,
std
::
string
或char我有一个分段错误错误.现在我的代码是:#include #include //shmat#include #include //open#include #include //closeusing namespace
std
;struct ...
C++开发者必须掌握的字符串优化技术(
std
::
string
_view实战指南)
掌握C++17字符串视图技巧,有效避免内存拷贝。本文详解
std
::
string
_view在函数传参、字符串处理中的高效应用,揭示其只读视图与生命周期管理的关键优势,提升性能与代码安全,值得收藏。
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章