繁体   English   中英

C ++字符分配

[英]C++ char allocation

我正在使用这样的东西:

char* s = new char;
sprintf(s, "%d", 300);

这行得通,但是我的问题是为什么?

当我尝试删除它时,出现错误,因此会导致内存泄漏。

之所以“有效”是因为sprintf希望将char*作为其第一个参数,并且您正在给他提供什么。

但是,您实际上只分配了一个 char因此向其写入多个char未定义的行为 可能分配了一个以上的字节,具体取决于...编译器,主机体系结构等,但是您不能依赖它。 实际上, 任何事情都可能发生,并且您不想基于这样的假设来编写代码。

为您的字符串缓冲区分配更多空间,或者更好地使用更“现代”的方法。 在您的情况下,可能是这样的:

std::string s = std::to_string(300);
// Or, C++03
std::string s = boost::lexical_cast<std::string>(300);

(我们这里不是在谈论性能,但是初始代码不正确,无论如何我们几乎都无法比较)。

此外,此代码不会泄漏任何内存,因为std::string会在销毁时释放其内部内存( s被分配在堆栈上,当它超出范围时将自动发生)。

您正在创建一个char缓冲区,然后使用四个char(“ 300 \\ 0”)对其进行写入[不要像我一样忘记字符串终止],因此'3'进入您分配的内存,而'0' '0'和'\\ 0'转到下一个属于其他人的存储位置。

C ++不会进行缓冲区溢出检查...因此它可以工作直到不...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM