【问题标题】:Assigning Values to unsigned short* buffer将值分配给 unsigned short* 缓冲区
【发布时间】:2021-03-03 06:50:00
【问题描述】:

我在为 unsigned short* 和 unsigned char* 缓冲区分配值时遇到问题。代码如下所示:

// Header File
unsigned short* short_buff;
unsigned char* char_buff;
// Implementation File
short_buff = new unsigned short[10];
memset(&short_buff, 0, 10);

char_buff = new unsigned char[10];
memset(&char_buff, 0, 10);

unsigned short sVal = 0;
unsigned char cVal = 0x0;

// All of these cause core dumps
short_buff[0] = sVal;
memcpy(&short_buff[0], &sVal, 2); // 2 bytes per unsigned short
std::cout << short_buff[0] << std::endl;

// All of these also cause core dumps
char_buff[0] = cVal;
memcpy(&char_buff[0], &cVal, 1); // 1 byte per unsigned char
std::cout << char_buff[0] << std::endl;


// Yet strangely these cause no issues
unsigned short s2Val = short_buff[0];
unsigned char c2Val = char_buff[0];

我完全不知道这里发生了什么以及为什么......任何帮助将不胜感激!

【问题讨论】:

    标签: c++ buffer dynamic-memory-allocation


    【解决方案1】:
    memset(short_buff, 0, 10*sizeof(short));
    

    memset(char_buff, 0, 10*sizeof(char));
    

    两个错误,&amp;错了,你应该把指针的值传给memset而不是指针变量的地址。 (这个版本memset(&amp;short_buffer[0], ...); 也可以)。

    其次,memset 计算字节而不是元素,因此您需要将数组大小乘以元素大小,为此使用 sizeof

    奇怪的是,您稍后使用memcpy 或多或少地得到了它。为什么memset 不一样?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多