C++自定义字符串修剪实现valgrind警告
C++ custom string trim implementation valgrind warning
最近我实现了一个用于修剪std::字符串的自定义函数,该函数删除了空白字符前缀和后缀。
我测试了功能,它根据我的单元测试工作,但当使用valgrind运行测试时,我得到了以下输出:
==4486== Conditional jump or move depends on uninitialised value(s)
==4486== at 0x415DDA: is_ws_char(char) (parse.cpp:22)
==4486== by 0x415BC6: parse::trim(std::string&) (parse.cpp:34)
我的输入测试字符串是
string s(" a");
我不明白这里出了什么问题。代码如下:
inline bool is_ws_char(const char c) { // this is line 22 in my code
return (c == ' ' || c == 'n' || c == 't' || c == 'r');
}
void parse::trim(std::string& str) {
size_t len = str.size();
size_t i = 0;
for (; i < len; ++i)
if (!is_ws_char(str[i]))
break;
const size_t start = i;
for (i = len - 1; i >= 0; --i)
if (!is_ws_char(str[i])) // this is line 34 in my code
break;
const size_t end = i;
str = str.substr(start, end - start + 1);
}
有人知道这里出了什么问题吗?我曾短暂地认为这只是一个勇敢的怪癖,但这似乎不太可能。
提前感谢!
此循环是无效的
for (i = len - 1; i >= 0; --i)
条件将始终等于true,因为表达式--i将始终>=0,因为i是无符号整数。
同样,当str.size()等于零时,len-1将等于std::string::npos。
相关文章:
- 警告处理为错误这里有什么问题
- valgrind-hellgrind与泄漏检查的结果不同
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- cppcheck在const std::string[]上引发警告
- GCC对可能有效的代码抛出init list生存期警告
- 如何在BST的这个简单递归实现中消除警告
- 关于std::move的使用,是否有编译警告
- g++ 在某个类成员未初始化时不发出警告
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 使用typeid警告未使用的变量
- 额外分配valgrind
- 示例C++项目编译中的警告
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 如何修复编译器警告 C6386 和 C6385?
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- 返回语句后的代码,没有警告
- 获取隐式转换溢出从无符号到已签名的警告
- 将(一些)valgrind警告视为错误
- Valgrind几乎对所有内容都给出了错误(警告:客户端切换堆栈?)
- C++自定义字符串修剪实现valgrind警告