+ -
当前位置:首页 → 问答吧 → Unhandled Exception in raytrace.exe: C0000005 access violation

Unhandled Exception in raytrace.exe: C0000005 access violation

时间:2010-08-24

来源:互联网

本帖最后由 liklstar 于 2010-08-24 12:31 编辑

我在调程序时出现这个错误,是如下语句引起的:
struct Vector **N;

N作为参数传入。我想把分配了内存且赋值了的N带出来。(在过程里分配内存并赋值)

*N = (struct Vector *)malloc(sizeof(struct Vector));

Unhandled Exception in raytrace.exe: C0000005 access violation

这是怎么回事?如何修正?

作者: liklstar   发布时间: 2010-08-24

你的N是struct Vector *吗,那你应该写成N = (struct Vector *)malloc(sizeof(struct Vector));估计是前头的*的问题

作者: daybreakcx   发布时间: 2010-08-24



QUOTE:
你的N是struct Vector *吗,那你应该写成N = (struct Vector *)malloc(sizeof(struct Vector));估计是前头 ...
daybreakcx 发表于 2010-08-24 12:25




    我的N是struct Vector **N。

作者: liklstar   发布时间: 2010-08-24

*N没有分配内存空间,N是个未初始化的指针,所以向其赋值失败。

作者: davelv   发布时间: 2010-08-24



QUOTE:
*N没有分配内存空间,N是个未初始化的指针,所以向其赋值失败。
davelv 发表于 2010-08-24 12:40




    可这个错误是在分配内存时出现的,还没等到赋值呢?

作者: liklstar   发布时间: 2010-08-24

你看你声明了 XXXX **N
这个N是一个指针吧,是指针就要有指向空间吧,那么你的*N是什么地方?N==&(*N) 是栈上的随机数据,或者你编译器给填充的东西(用的VC吧,看到C0000005了)。也就是说*N目前的地址是C0000005。这块内存是不能访问的,至于后面的malloc赋值语句,是要把malloc出来的内存地址放到C0000005这块内存上,自然就出错了。
画画内存图,自己用指针指一下。要知道指针本身也是要占用空间的!

作者: davelv   发布时间: 2010-08-24

回复 davelv


      8错,

作者: 奶茶dsk   发布时间: 2010-08-24



QUOTE:
你看你声明了 XXXX **N
这个N是一个指针吧,是指针就要有指向空间吧,那么你的*N是什么地方?N==&(*N) 是栈 ...
davelv 发表于 2010-08-24 12:52




那我该怎么改呢?

作者: liklstar   发布时间: 2010-08-24