我正在开发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
知道发生了什么事吗?谢谢
答案 0 :(得分:2)
你分配的内存不足。这里,list
的大小为60 * 45 * 2 = 5400个元素。您正在尝试访问60 * 4096-3345 = 242415th元素。
可以访问不属于与list
关联的内存的内存。第242415个元素不存在。这是SegmentationFault。
您需要使用类似calloc(_width*_height*100,sizeof(...));
的内容来处理此问题。但是,你会浪费大量的内存。
此外,您永远不会为next
和next->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
初始化。