首页 > 解决方案 > 为 unsigned char* 分配一个数字

问题描述

我正在使用 unsigned char* 来存储最大约为 200 的信息,我正在使用 char 指针,因为我想稍后删除

unsigned char* hello = new unsigned char;
delete hello;

但是当我尝试为其分配一个值时,hello = 54它会给出错误 a value of type "int" cannot be assigned to an entity of type "unsigned char*"

标签: c++pointers

解决方案


帮自己一个忙,int如果它是一个整数就使用它。否则,一旦您遇到期望char对象实际上是字符的函数重载(例如,格式化的流 IO),它就会变得混乱:

int hello = 52;

如果确实需要节省一些内存,可以unsigned char直接使用:

unsigned char hello = 52;

如果出于某种原因,您希望将对象的生命周期限制在更小的范围内,您可以引入另一层嵌套:

{
    unsigned char hello = 52;
} // no need to delete here, because the object is destroyed automatically

请注意,当您声明一个指针(现在可能是 64 位宽)并动态分配内存以在其他地方保存一个字节时,您实际上使用了更多内存。

如果您真的想将对象的生命周期延长到当前范围之外,则可以改用智能指针,以防止出现内存泄漏或双重释放等问题。

std::unique_ptr<char> hello = std::make_unique<char>(52);

但请注意,这通常很麻烦,而且通常根本没有必要,尤其是对于这么小的物体。只需声明一个局部变量,根据需要复制它,然后完成它。


除此之外,您需要取消引用指针以访问指针指向的对象:

unsigned char * p = new unsigned char;
*p = 52;
delete p;

推荐阅读