为 unsigned short* 缓冲区赋值

Assigning Values to unsigned short* buffer

我在为 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];

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

memset(short_buff, 0, 10*sizeof(short));

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

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

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

奇怪的是,你后来或多或少地对 memcpy 做了正确的选择。为什么 memset 不是同样的事情?