CPP中字符串的内存管理问题
Memory management issue with string in CPP
我正在尝试将填充' '的字符串分开,并将其存储在数组中。为此,我编写了如下代码
string* componentsOfStringSeperatedBystring(string originalString, string stringCompare){
string *arryOfStrings=NULL;
string *tempArrayString = NULL;
for (int i=0; i<originalString.length(); i++) {
size_t position = originalString.find(stringCompare);
cout << "nposition" <<position;
if (position == originalString.npos) {
break;
}
size_t subStringLength = originalString.length() - position;
cout << "nsubStringLength" <<subStringLength;
string subString = originalString.substr(0,position);
cout << "nsubString" <<subString;
tempArrayString = (string*)realloc(arryOfStrings, (i+1)*sizeof(string));
cout << "n i t" <<i;
if (tempArrayString != NULL) {
arryOfStrings = tempArrayString;
arryOfStrings[i] = subString;
}
cout << "narryOfStrings" <<arryOfStrings;
originalString = originalString.substr(position+1,subStringLength);
}
return arryOfStrings;
}
我在"arryOfStrings[I] = subString;"上崩溃了,如果我只是先分配足够的空间,然后不重新分配,我就不会崩溃
不要在c++风格的对象上使用C风格的内存管理。要么完全采用C风格(使用以空结尾的char*
字符串),要么完全采用c++风格(使用std::vector<std::string>
)。
您需要使用new
与std::string
而不是c内存分配函数。
它们不像new
那样调用std::string
类的构造函数。并且需要调用std::string
类的构造函数来进行正确的初始化。
老实说,你根本不应该使用std::string *
。如果这样做,您将失去一开始避免使用char *
所获得的所有优势。只需使用:
std::vector<std::string>
相关文章:
- 字符 * 未从重载运算符或内存管理问题正确返回
- Waveshare 电子纸 ESP32 板上的 HTTP 客户端管理问题
- c++中的内存管理问题
- C++堆栈内存管理问题
- C 内存管理问题,std :: vector nevere rase内存超出范围
- MPI 新手 - 关于'mpirun'如何工作和流程管理的一些问题
- 内存管理策略的问题
- C++中的复杂内存管理问题
- 有关资源管理器类的 RAII 问题
- CUDA 内存管理/类问题中的指针
- 执行命令行管理程序命令时出现性能问题
- 在 Qt5.3(mingw32) 中删除 QQuickView 的内存管理问题
- C++内存管理问题(分配大量内存,但从不释放内存)
- 内存管理容器设计问题 - 项目需要继承
- C++中管理内存泄漏的问题
- 在头文件中存储代码会导致c++中的内存管理问题吗?
- 内存管理问题
- 涉及类析构函数和删除运算符的一些内存管理问题
- CPP中字符串的内存管理问题
- c++纯虚拟方法内存管理问题