恳请指教

xiaolinzi0941 2003-10-16 06:17:48
我在用VC++.net开发程序(ok.exe)的时候遇到了这样一个问题:
float **textureDataX,**textureDataY,**textureDataZ,**textureDataC;
int w,h;
w=32,h=32;
textureDataX=(float**)malloc(w);
textureDataY=(float**)malloc(w);
textureDataZ=(float**)malloc(w);
textureDataC=(float**)malloc(w);

for(int x=0;x<w;x++)
{
textureDataX[x]=(float*)malloc(h);
textureDataX[x]=(float*)malloc(h);
textureDataX[x]=(float*)malloc(h);
textureDataX[x]=(float*)malloc(h);
}
for(int x=0;x<w;x++)
for(int z=0;z<h;z++)
{
textureDataX[x][z]=w;
textureDataY[x][z]=w+h;
textureDataZ[x][z]=h;
textureDataC[x][z]=w-h;
}
编译通过,在程序运行的时候出现如下错误信息:OK.exe 中的 0x00412a4f 处未处理的异常: 0xC0000005: 写入位置 0x186fe000 时发生访问冲突 。不知如何解决,盼请指教。
...全文
56 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
LostKing 2003-11-15
  • 打赏
  • 举报
回复
纯粹的2级指针不可以象2维数组那样做二次下标运算的.
因为编译器在处理下标运算时不知道2级指针的第一维寻址偏移量(即每一行的元素个数)为多少,就会指定一个不确定的偏移值,这样会发生非法内存访问.

如textureDataX[x][z]就是错误,因为textureDataX是个2级指针,不是2维数组名
(2维数组的数组名是指明了第1维的寻址偏移量的2级指针),编译器不知道这个"x"在内存中
偏移多少的量才能找到第x行的初始位置,就可能指定了一个任意的偏移量,偏移向了不该访问的内存.发生错误.
wanglingyes 2003-10-21
  • 打赏
  • 举报
回复
这种小程序最好把所有代码显示出来不然条件太广了。一般是你有一些对象没有在定义的地址上,又没有分散,只要返回失败,就把消息分流到某个出错消息的对话框。这也是某些垃圾软件的小招数。要这样分析你的算法实在头痛。
poweruser 2003-10-18
  • 打赏
  • 举报
回复
内存访问出错了,在调试状态跟踪一下吧,这样的问题很好解决
cynew 2003-10-17
  • 打赏
  • 举报
回复
很不幸的告诉你,,,明显是你的指针指控了,请你检查你指针所指的内容是否越界了。

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧