为 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
不是同样的事情?
我在为 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
不是同样的事情?