string::c_str返回不可访问的内存
最近程序的崩溃一直困扰着我,都是发生在访问string::c_str返回的字符串时,访问内存无效,有时甚至是0x10000以下的地址。我是直接返回string变量的c_str(),string变量的生存期都还在。可不可以认为是堆内存被破坏了,这种问题应该怎么跟踪?
[解决办法]
http://topic.csdn.net/u/20110330/22/85079fde-6e94-41c4-af45-3f070268c22b.html 看看,对你会有帮组的···
[解决办法]
我是直接返回string变量的c_str(),string变量的生存期都还在???等待其他牛人回答···
[解决办法]
The member function returns a pointer to a nonmodifiable C string constructed by adding a terminating null element (E(0)) to the controlled sequence. Calling any non-const member function for *this can invalidate the pointer.
http://topic.csdn.net/u/20071003/14/e7ed177e-07a7-4dd8-954f-af949ca54377.html
[解决办法]
或者参考 http://www.cplusplus.com/reference/string/string/c_str/
[解决办法]
会不会是别的某个地方内存越界引起的?
最好有个例子。
[解决办法]
额,只是不是new出来的。超出变量的作用域。这个变量就不存在了···
[解决办法]
如果那个string变量的内容改变了的话,那么之前c_str()返回的指针可能就会失效
[解决办法]
多线程程序?std::string的很多实现是使用了引用计数的。
加锁吧。
[解决办法]
没看到代码不好判断
[解决办法]
在你访问那个无效地址前,加个断点,看看能否正常访问那个string变量
[解决办法]
[解决办法]
看看你编译配置,是否正确。另外就是clear一下,重新编译运行。这种情况一般是由于编译器或设置的问题。不知道你真实的环境是什么,所有没法定位
[解决办法]
下内存断点调试,看看哪个调用修改了那块内存,绝大多数情况是越界引起的,可能某段代码在运行时(尤其是多线程下)存在越界,可能一次一字节,总会覆盖到某些靠近的内存空间,引起诡异di崩溃,很难跟
[解决办法]
你看下是不是跨dll使用了string吧
[解决办法]
[解决办法]
哈哈,根据21楼的启示,已经为楼主找到解决方法。
编译器->窗口->调试->内存调试
监控查看string的地址变化