草庐IT

jobseeker_string

全部标签

C++ 的 std::string 池,调试版本? std::string 和 valgrind 问题

我遇到许多关于std::string中可能的内存泄漏的valgrind警告问题,比如这个:120bytesin4blocksarepossiblylostinlossrecord4,192of4,687at0x4A06819:operatornew(unsignedlong)(vg_replace_malloc.c:230)by0x383B89B8B0:std::string::_Rep::_S_create(unsignedlong,unsignedlong,std::allocatorconst&)(in/usr/lib64/libstdc++.so.6.0.8)by0x383B8

c++ - string::c_str() 是否允许在堆上分配任何东西?

如果我需要从std::string中获取一个以NUL结尾的char数组,在这种情况下我需要确保不会分配任何内容,是使用c_str这样做安全吗?例如,如果我在析构函数中并且我想将一些数据从string复制到一个预先分配的固定大小的缓冲区中,我可以使用c_str和确定它不会抛出任何东西吗? 最佳答案 标准规定调用c_str()可能会使引用string元素的引用、指针和交互器无效,这意味着允许重新定位(21.3/5"类模板basic_string").您可能只想调用string::copy()来获取拷贝(如果需要,您需要自己添加空终止符)

c++ - 返回 char 数组作为 std :string

如果没有显式转换或调用std::string构造函数,以下内容是否安全?如果不安全,为什么不呢?std:stringmyfunc(){charbuf[128]="";//putsomethingintobufornotbaseonlogic.returnbuf;} 最佳答案 是的。那很好。调用者将获得本地缓冲区的拷贝,因为std::string会从该本地缓冲区中进行深度复制!编辑:我假设buf是空终止字符串! 关于c++-返回char数组作为std:string,我们在StackOver

C++ 程序在执行 std::string 分配时总是崩溃

我一直在尝试调试崩溃的应用程序中的崩溃(即断言*glibcdetected*free():invalidpointer:0x000000000070f0c0***)当我尝试对字符串进行简单赋值时。请注意,我正在使用gcc4.2.4优化级别设置为-O2的linux系统上进行编译。使用-O0应用程序不再崩溃。例如std::stringabc;abc="testString";但如果我按如下方式更改代码,它就不会再崩溃了std::stringabc("testString");所以我又挠头了!但有趣的模式是,崩溃在应用程序中稍后移动,AGAIN在另一个字符串。我发现应用程序在字符串分配时不断

c++ - 将空终止的 const char* 字符串数组转换为 std::vector< std::string >

我有一个VisualStudio2008C++函数,我在其中获得了一个空终止字符串数组constchar*以及该数组中字符串的数量。我正在寻找一种巧妙的方法来转换constchar*的数组在std::vector///@paramcount-numberofstringsinthearray///@paramarray-arrayofnull-terminatedstrings///@return-avectorofstlstringsstd::vectorConvert(intcount,constchar*array[]);Boost可以,STL可以。

c++ - 为什么 std::string 没有标准定义的文字后缀?

一个简单的问题:为什么C++11不提供“用户”(实际上是标准库)定义的文字来创建std::string,例如autostr="helloworld"s;//strisastd::string与C++一样,Objective-C既支持C风格的字符串,也支持对用户更友好的库类型NSString;然而,与C++不同的是,没有人会混淆两者,因为通过在字符串文字前加上@来创建NSString是微不足道的。事实上,很少看到Objective-C代码的文字没有有@前缀。每个人都知道这样做的方式,使用NSString并继续使用它。C++11用户定义文字允许这样做,事实上Stroustrup的C++11

c++ - 为什么编译器选择 bool 而不是 string 来进行 L""的隐式类型转换?

最近引入了一个方法的重载,应用程序开始失败。终于追踪到,新方法在我没想到的地方被调用了。我们有setValue(conststd::wstring&name,conststd::wstring&value);std::wstringavalue(func());setValue(L"string",avalue);std::wstringbvalue(func2()?L"true",L"false");setValue(L"bool",bvalue);setValue(L"empty",L"");它已更改,以便在存储bool值时我们使用相同的字符串(字符串的内部数据存储)setValu

c++ - 使用带有 std::string 键和 int 键的 std::map 的成本?

我知道单个map查询最多需要log(N)时间。但是我想知道,我已经看到很多使用字符串作为映射键的示例。例如,将std::string作为键关联到映射而不是int的性能成本是多少?std::mapsomeMap;对比std::mapsomeMap;谢谢! 最佳答案 分析算法的渐近性能正在研究必须执行的操作以及它们添加到等式中的成本。为此,您需要首先了解执行的操作是什么,然后评估其成本。在平衡二叉树(映射恰好是)中搜索键需要O(logN)复杂的操作。这些操作中的每一个都意味着比较匹配的键,如果键不匹配则跟随适当的指针(子指针)。这意味着

c++ - std::string::clear 是否回收与字符串关联的内存?

例如,如果将一个文本文件加载到std::string中,对它做了我需要做的事情,然后对其调用clear(),这会释放保存文本的内存吗?或者我是否最好将其声明为指针,在需要时调用new,并在完成后删除它? 最佳答案 调用std::string::clear()只是将大小设置为零。capacity()不会改变(reserve()比当前保留的内存少也不会改变容量)。如果你想回收分配给字符串的内存,你需要按照以下方式做一些事情std::string(str).swap(str);复制字符串str通常只会保留合理数量的内存,并将其与str的表

c++ - 如何从三个整数(或者可能是一个 git/SVN commit/rev.string)生成一个 constexpr 版本字符串?

说我有constexprconststd::uint8_tmajor=1;constexprconststd::uint8_tminor=10;constexprconststd::uint8_tbugfix=0;我要constexprconstchar*version_string(){...}在此示例中要返回等效于"1.10.0",我该怎么做?我假设我需要这两个,在constexpr中:整数到字符串的转换字符串连接这个问题纯粹是学术性的,除了“这是可能的”之外,我认为实际上拥有它constexpr几乎没有用处。我只是看不出结果如何。我愿意接受适用于GCC4.9和Clang3.4/3