调用具有字符串参数direct vs variable的函数
Call of a function with String parameter direct vs variable
我遇到了一个问题,我真的不理解在ESP8266上使用Arduino的ESP8266内核开发软件。基本上,如果我传递在调用函数时创建的String
,我的程序就会崩溃。我有一个以String
为参数的函数:
void SimpleFunc(String str)
{
...
}
我尝试了两种方法,用一个很长的String
调用这个函数第一种方法是创建一个新的String
变量并传递它:
String veryLongString = "veeeerryyyy loooong ........."; //Much longer in reality!!!
SimpleFunc(veryLongString);
第二种方法是直接通过String
:
SimpleFunc("veeeerryyyy loooong .........");
运行第二个草图会导致崩溃。这是堆栈的一部分:
umm_assilate_up在。。。\esp8266\2.3.0\cores\esp8266\umm_malloc/um_malloc.c线1163
String::~String()位于。。。\esp8266\2.3.0\cores\esp8266/WString.cpp行720
_umm_free在。。。\esp8266\2.3.0\cores\esp8266\umm_malloc/um_malloc.c线1287
免费时间。。。\esp8266\2.3.0\cores\esp8266\umm_malloc/um_malloc.c线1733
String::~String()位于。。。\esp8266\2.3.0\cores\esp8266/WString.cpp行720
以这种方式调用函数有什么区别?为什么第一种方法有效,而第二种方法无效?
如果通过引用调用字符串
void foo(std::string const &str)
不复制基础字符。如果您按价值调用
void food(std::string str)
str被复制,如果它很长,这是一个昂贵的操作,可能会导致机器内存不足。
相关文章:
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Singleton - Prevent ::instance() to variable
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 数据成员SFINAE的C++17测试:gcc vs clang
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 正在VS调试器中监视映射条目
- Confusion: decltype vs std::function
- 将IBM Rhapsody模型集成到VS 2019中
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 使用VS Code和CMake Tools运行自定义命令
- 修改 VS Code 中的默认C++代码段
- 如何使用c++在VS 2019上运行SQL查询
- vs 2015 constexpr变量不恒定,但与2019相比还好吗
- 完美前进使用 std::forward vs RefRefCast
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- C++17 'inline variable' vs 'extern' 关键字继承自 C 的新功能
- Clang -Wunused-const-variable in C vs. C++
- 调用具有字符串参数direct vs variable的函数