全局变量 int dMin=-9999; int d[23][23][23]; 在main()中执行后memset(d,dMin,sizeof(d));出错,初始化后的数据不对
时间: 2024-10-02 15:04:26 浏览: 33
全局变量 `int dMin = -9999;` 和二维数组 `int d[23][23][23];` 的情况表明,你尝试通过 `memset` 函数将整个数组 `d` 初始化为 `dMin` 的值。`memset` 是用于填充内存块的函数,常用于清除字符串、数组等的初始值。
然而,这里可能会遇到错误的原因有几个:
1. **数组大小未传递给memset**:当你试图用 `sizeof(d)` 初始化数组时,实际上你需要传递数组每个元素的大小,而不是整个数组的大小。因为 `d` 是三维数组,所以应该使用 `sizeof(int)` 三次,即 `sizeof(int) * sizeof(int) * sizeof(int)`。
2. **指针类型错误**:`memset` 需要一个指向数组首地址的指针作为第一个参数,如果你直接传入数组名,`d` 并不是一个指针,它会当作整数处理,导致错误。
3. **数值溢出**:如果 `dMin` 的值 `-9999` 对应的二进制表示超过了 `int` 类型的最大范围,那么 `dMin` 实际上存储的是一个不确定的值,这时 `memset` 可能不会按预期工作。
修正后的代码可能是这样的:
```cpp
#include <string.h>
// ...
int (*ptr)[23][23][23] = (int(*)[23][23][23])d;
memset(ptr, dMin, sizeof(*ptr) * sizeof(*ptr[0]) * sizeof(*ptr[0][0]));
// 或者
int dMin = -9999;
size_t size = sizeof(d[0][0][0]);
for (size_t i = 0; i < sizeof(d)/size; i++) {
for (size_t j = 0; j < sizeof(d[0])/size; j++) {
for (size_t k = 0; k < sizeof(d[0][0])/size; k++) {
d[i][j][k] = dMin;
}
}
}
```
阅读全文