【发布时间】:2014-01-08 18:22:03
【问题描述】:
我已经 [尝试] 为 zBuffer 实现一个二维数组,如下所示:
struct Properties {
....
double** zBuffer;
....
}
这里是使用它的地方:
void initializeZBuffer(Properties* props){
//Destroy old zBuffer 2D array (if it's already been initialized)
if (sizeof props->zBuffer[0] >= 0){
for (int i = 0; i < props->clientRect.Height(); i++){
delete[] props->zBuffer[i];
}
delete[] props->zBuffer;
}
//Create new zBuffer 2D array
props->zBuffer = new double*[props->clientRect.Height()]; //zBuffer height x width
for (int i = 0; i < props->clientRect.Height(); i++){
props->zBuffer[i] = new double[props->clientRect.Width()];
}
}
我的目标是创建一个数组,为屏幕上的每个 x y 像素保存一个 z 值。
我的代码中的问题是:我检查数组中是否有任何数据——它不应该在第一次迭代时出现,但它确实存在。由于某种原因,每个插槽的大小为 4。
例如此时调试时:
sizeof props->zBuffer[1] -----> returns 4
sizeof props->zBuffer[100] -----> returns 4
sizeof props->zBuffer[1000000] -----> returns 4
sizeof props->zBuffer[10000000000] -----> returns 4
和
sizeof props->zBuffer[1][1] -----> returns 4
sizeof props->zBuffer[100][100] -----> returns 4
sizeof props->zBuffer[1000000][1000000] -----> returns 4
sizeof props->zBuffer[10000000000][10000000] -----> returns 4
由于它的大小为 4,我自然会尝试查看 props->zBuffer[3](最后一个插槽)中的内容,但我收到一个错误
ds->zBuffer[3]
CXX0030: Error: expression cannot be evaluated
有人知道发生了什么吗? 我完全感到困惑和沮丧:(
【问题讨论】:
-
它是一个指针,而不是一个数组。指针不是数组。
-
欲了解更多信息,请参阅stackoverflow.com/questions/2034450/…
-
您似乎认为
sizeof告诉您内存分配的运行时大小。它没有。 -
sizeof 在编译时计算。
-
你确定最后一组不都返回
8吗?他们没有必须这样做,但我希望他们这样做。