c++ - 为 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*"
解决方案
帮自己一个忙,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;
推荐阅读
- swift - 我每次都遇到同样的错误:线程 3:信号 SIGABRT,我该怎么办?
- javascript - 需要帮助才能使此下拉菜单正常工作
- bash - Bash“没有这样的文件或目录”但它存在
- javascript - 使用密码连接到数据库的最佳方法是什么?
- iis - 不指定域名的 IIS 重写规则
- c# - 如何解决 HTTP 错误 404.15 - 未找到?
- java - 执行 java 程序时出现异常“java.lang.NoClassDefFoundError: com/eviware/soapui/config/InvalidSecurityScanConfig”
- c# - 以编程方式返回一个类的实例,但有点不同
- python - Eclipse:除非有打印语句,否则while循环不起作用
- javascript - 如何将两个数据表内容的滚动同步在一起(ag-grid)