线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x8)错误c ++

时间:2015-03-03 13:10:08

标签: c++

我正在开发c ++应用程序。我已分配内存,但我在superfile.cpp中获取错误Thread 1: EXC_BAD_ACCESS ( code=2,address=0x8)。这是我的代码:

superfile.h

struct Node{
        Voxel   *data;
        Node    *next;
    };

superfile.cpp

int* cnt =(int*)calloc(_width*_height,sizeof(int));
    Voxel *temp =(Voxel *)calloc(_width*_height,sizeof(Voxel)); 
    Node *list=(Node *)calloc(_width*_height*2,sizeof(Node));

list[(_width*_height)+l].next = list[_width*yy + xx].next->next; // Thread 1: EXC_BAD_ACCESS ( code=2,address=0x8) Error c++
调试后的

变量值为:

_width=60
_height=45
l=3
yy=4096
xx=-3345

知道发生了什么事吗?谢谢

enter image description here

2 个答案:

答案 0 :(得分:2)

你分配的内存不足。这里,list的大小为60 * 45 * 2 = 5400个元素。您正在尝试访问60 * 4096-3345 = 242415th元素。

可以访问不属于与list关联的内存的内存。第242415个元素不存在。这是SegmentationFault。

您需要使用类似calloc(_width*_height*100,sizeof(...));的内容来处理此问题。但是,你会浪费大量的内存。

此外,您永远不会为nextnext->next分配内存。试试这个

list[_width*yy + xx].next=calloc(50, sizeof(...));
list[_width*yy + xx].next->next=calloc(50, sizeof(...));
list[(_width*_height)+l].next = list[_width*yy + xx].next->next;

此处50只是随机数,我不确定您的struct消耗了多少空间。

答案 1 :(得分:1)

你在这里取消引用一个空指针:

list[(_width*_height)+l].next = list[_width*yy + xx].next->next;
                                                         ^^^^^^

list[_width*yy + xx].next的值为0,由calloc初始化。