假设我有一个像这样的构造函数:
MyColor(uint8 vec[]) {
r = vec[0];
g = vec[1];
b = vec[2];
a = vec[3];
}
Run Code Online (Sandbox Code Playgroud)
但我称之为(3个元素而不是4个):
uint8 tmp[] = {1,2,3};
MyColor c(tmp);
Run Code Online (Sandbox Code Playgroud)
但是现在vec[3]是未定义的...将此值赋给是否安全a?如果没有,没有很好的解决方法来检查是否vec[3]设置了吗?
sth*_*sth 13
不,这不安全.您正在读取尚未分配的内存,这是未定义的行为.根据月相的不同,您可能会或可能不会出现分段错误.
要"解决"它,请确保传入的数组始终具有正确的大小.在您的示例中,您可以:
uint8 tmp[4] = {1,2,3};
MyColor c(tmp);
Run Code Online (Sandbox Code Playgroud)
初始化程序不需要指定所创建的数组的所有元素,因此可以显式初始化前三个值.其余值将设置为零.
| 归档时间: |
|
| 查看次数: |
824 次 |
| 最近记录: |