我一直在运行这种随机游走模拟一段时间,我不断从Xcode收到错误EXC_BAD_ACCESS
。它虽然打印了大部分模拟。
我认为由于某些原因内存不足但我不确定原因。
如果我走向数组的末尾,我编辑它,所以我不会在边缘的100个空格内(通过将变量步骤编辑为步骤-100)。这有效,但我想知道发生了什么。
任何帮助将不胜感激。
double** places;
places = (double**) malloc(steps*sizeof(double*));
for (int i = 0; i < steps; i++)places[i] = (double*) malloc(2*sizeof(double));
for (i = 0; i< steps/*, exit*/; i++) {
// Find the angle of movement
angle = getRand()*360;
// Take a step
xPos+= STEP*cos(angle);
yPos+= STEP*sin(angle);
//Write Step to array
places[i][1] = xPos;
places[i][2] = yPos;
//Write Step to File
fprintf(ff, "%d %lf %lf\n",i,xPos,yPos);
}
答案 0 :(得分:7)
数组索引从零开始。
你的意思是写这个吗?
places[i][0] = xPos; //Zeroth element is considered the first element
places[i][1] = yPos; //Second element
答案 1 :(得分:0)
您已经分配了一个适当大小的数组(步骤x 2),但是您在子数组上写入错误的偏移量。它们应该是[0]和[1],而不是[1]和[2]。
[2]
实际上是 3rd 数组元素,所以你要在子数组的边界之外写字。
答案 2 :(得分:0)
内部数组(位于places[i]
)有两个元素的空间 - 由[0]
和[1]
索引,因为数组索引通常在C中从零开始。在这里,你将它们编入索引使用[1]
和[2]
。您需要使用[0]
和[1]
,或为三个元素分配足够的空间(并浪费为[0]
分配的空间)。
答案 3 :(得分:0)
索引从0开始。
这应该是:
places[i][0] = xPos;
places[i][1] = yPos;
答案 4 :(得分:0)
你是一个人。 C中的数组是从零开始的,因此第一个元素位于位置0.您需要将赋值更改为places数组,如下所示:
// Write Step to array
places[i][0] = xPos;
places[i][1] = yPos;