【发布时间】:2016-02-19 11:43:01
【问题描述】:
我正在尝试编写一个函数来将一串十六进制值转换为字节数组。这段代码有什么问题?
调用 free() 后,我收到错误 HEAP CORRUPTION DETECTED。如果我评论对 sscanf 的调用,一切正常。 sscanf 是否写入了超出 malloc 分配的内存的内容?
unsigned char* hextobytes(const string& hex) {
size_t size = hex.size() / 2;
unsigned char* bytes = (unsigned char*)malloc(size);
const string::value_type* pos = hex.c_str();
for (size_t c = 0; c < size; c++) {
sscanf((pos + 2 * c), "%2hhx", bytes + c);
}
return bytes;
}
int _tmain(int argc, _TCHAR* argv[]) {
string hex = "FFFF";
unsigned char* bytes = hextobytes(hex);
free(bytes);
return 0;
}
更新:我正在开发 Visual Sudio 2013
【问题讨论】:
-
不要在 C++ 中使用
malloc,使用new(并尽量避免显式使用它:阅读智能指针和容器) -
嗯....这是非常多的C,我必须很难看到它的C++部分...
-
@DevSolar 仔细看,它就在那里,在 for 循环的第三个表达式中:)
-
@Lundin:他正在转换
malloc()的返回值,那是一个死的赠品。 :) {我是一个 baaaaad 人...} -
这段代码没有错误。请记住,堆损坏通常是在损坏完成很久之后才报告的,而且通常不是由进行分配的代码引起的。