C++两个string用“+”拼接,报读内存异常,应该是内存溢出了

自己写的小程序又没这个问题,请问什么情况下会出现这种问题?应该怎么排查?

当字符串很长的时候,软件向操作系统申请内存,但操作系统的内存管理器并不能够分配这么多内存是会报错。使用GetLastError()函数,返回一个整数。如果你用的VC6的话,在tools中的error lookup中可以找到具体错误原因。注意,一定要在执行+后马上调用GetLastError()。调用这个函数可能要包含一个头文件,是什么我忘了,你自己查查吧。追问

字符串不长啊,就几个字符,用的vs2005,程序已经崩了,还怎么加GetLastError函数呢?

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-09-12
确认是string

那是可以使用+连接的,

代码如何写的追问

感觉就这样写都有问题,很奇怪的是debug版本没问题,就release版本有问题
void ShellManager::_UpdateWindowTitle(const string &targetName) throw(InternalException){
string title;
title = targetName + targetName;
}

追答

/// C++, VS2015测试过,没有问题

#include
#include
using namespace std;

void testJoin(string &s){
string title;
title=s+s;
cout<<title<<endl;
}

int main(){
string a="aaaaaaaaa";
testJoin(a);
}

追问

我自己写的也试过,没问题,但是这个程序肯定要复杂点,不晓得从哪儿入手分析了

追答

前后,多写些log 。。。。。。。。

追问

没用啊,就是在执行title = targetName + targetName;句的时候死的

本回答被网友采纳

C++两个string用“+”拼接,报读内存异常,应该是内存溢出了
当字符串很长的时候,软件向操作系统申请内存,但操作系统的内存管理器并不能够分配这么多内存是会报错。使用GetLastError()函数,返回一个整数。如果你用的VC6的话,在tools中的error lookup中可以找到具体错误原因。注意,一定要在执行+后马上调用GetLastError()。调用这个函数可能要包含一个头文件,是什么...

java中的内存溢出和c++中的内存溢出,是一个概念吗
而其中,内存溢出就是你要求分配的java虚拟机内存超出了系统能给你的,系统不能满足需求,于是产生溢出。内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问,该块已分配出来的内存也无法再使用,随着服务器内存的不断消耗,而无法使用的内存越...

如何解决C++中溢出的问题?
1. 内存溢出问题是 C 语言或者 C++ 语言所固有的缺陷,它们既不检查数组边界,又不检查类型可靠性(type-safety)。众所周知,用 C\/C++ 语言开发的程序由于目标代码非常接近机器内核,因而能够直接访问内存和寄存器,这种特性大大提升了 C\/C++ 语言代码的性能。只要合理编码,C\/C++ 应用程序在执行效率上...

内存溢出是什么意思
内存溢出问题的根源复杂多样。例如,使用如C\/C++这类非类型安全的编程语言时,可能导致内存溢出。这类语言在内存管理方面相对宽松,程序员需自行负责内存的分配与释放,而稍有不慎便可能导致内存资源被不当使用或泄露。不当存取或复制内存缓冲区也是引发内存溢出的常见原因。在进行数据操作时,如果未正确判断...

内存溢出是什么意思?
内存溢出主要有两种类型:堆内存溢出和栈内存溢出。堆内存溢出通常发生在动态分配内存时,如使用C++语言中的new操作符。而栈内存溢出则通常发生在函数调用过程中,如递归函数调用过多导致栈空间耗尽。解决内存溢出问题的方法包括优化代码、增加内存分配或使用更高效的内存管理策略。例如,可以避免使用过大的数据...

溢出的分析原因
因此,你还得检检这两个参数!(2)检验内存缓冲区如何知道由参数传来的内存缓冲区长度是否真实呢?你会完全信任来自用户的数据吗?通常,答案是否定的。其实,有一种简单的办法可以检验内存缓冲区是否溢出。请看如下代码片断:void Function(char *szName, DWORD cbName) {char szBuff[MAX_NAME]...

C++拷贝函数的一个问题
不过c数组之后的的内存已经被破坏,如果后续还有变量声明则可能破坏该变量的值,更严重的可能写入程序的代码区,从而导致程序崩溃。sizeof函数只是返回数据类型或变量的大小,所以sizeof(b)=8, sizeof(c)=2,因为当时分配就给了这么大的空间, 要察看字符串长度应该用strlen(c)函数,其中c是 const ...

Microsoft C++ 异常: 内存位置 0x073ee15c 处的 cv::Exception。_百度知 ...
内存溢出,检查下图片格式和大小是否与代码有冲突。比如图片的大小超过了代码中设置的内存缓冲大校

Microsoft C++ 异常: 内存位置 0x008ff5c8 处的 cv::Exception,求解答...
内存溢出,检查下图片格式和大小是否与代码有冲突。比如图片的大小超过了代码中设置的内存缓冲大小。

网络中什么是溢出啊?
然而,C\/C++ 语言导致内存溢出问题的可能性也要大许多。其他语言也存在内容溢出问题,但它往往不是程序员的失误,而是应用程序的运行时环境出错所致。 2. 当应用程序读取用户(也可能是恶意攻击者)数据,试图复制到应用程序开辟的内存缓冲区中,却无法保证缓冲区的空间足够时(换言之,假设代码申请了 N 字节大小的内存...

相似回答