0xC0000005: 写入位置 0xCDCDCDCD 时发生访问冲突。 系统提示我使用了未初始化的内存,但是我定义的动态二维数组不都初始化了吗。还有个问题就是我子函数里申请的动态内存在哪里free掉呢。
void ScanLineSegment(double **a, int m)
{
double **p;
p = (double **)malloc(sizeof(double *) * m);
for (i = 0; i < m; i++)
p[i] = (double *)malloc(sizeof(double) * 2);
for (int i = 0; i < m; i = i + 2) {
p[i][0] = a[i][0];
p[i][1] = a[i][1] * 1024;
p[i + 1][0] = a[i + 1][0];
p[i + 1][1] = a[i + 1][1] * 1024;
}//将坐标映射到窗口坐标上
double d = 40;//定义条纹的宽度
double k, dx, dy;
int **coordinate;
coordinate = (int **)malloc(sizeof(int *) * (m / 4));
for (i = 0; i < m; i++)
coordinate[i] = (int *)malloc(sizeof(int) * 8);
for (j = 0; j < L; j = j + 4) {
k = (p[j][1] - p[j + 2][1]) / (p[j + 3][1] - p[j + 1][1]);
dx = d / (sqrt(k*k + 1)) / 2;
dy = dx*k;
coordinate[j / 4][0] = (int)(p[j][1] - dx + 0.5);
coordinate[j / 4][1] = (int)(p[j + 1][1] - dy + 0.5);
coordinate[j / 4][2] = (int)(p[j][1] + dx + 0.5);
coordinate[j / 4][3] = (int)(p[j + 1][1] + dy + 0.5);
coordinate[j / 4][4] = (int)(p[j + 2][1] + dx + 0.5);
coordinate[j / 4][5] = (int)(p[j + 3][1] + dy + 0.5);
coordinate[j / 4][6] = (int)(p[j + 2][1] - dx + 0.5);
coordinate[j / 4][7] = (int)(p[j + 3][1] - dy + 0.5);
}
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0, 0.0, 0.0);
glBegin(GL_POINTS);
Point **spt;
spt = (Point **)malloc(sizeof(Point *) * (m / 4));
for (i = 0; i<4; i++) {
spt[i] = (Point *)malloc(sizeof(Point) * 5);
}
for (i = 0; i < m / 4; i++) {
for (j = 0; j < 8; j = j + 2) {
spt[i][j / 2] = Point(coordinate[i][j], coordinate[i][j + 1]);
}
spt[i][4] = spt[i][0];
ScanLine(spt[i], 5);
}
glEnd();
glFlush();
}
void display() {
double **a;
int m = L;
a = (double **)malloc(sizeof(double *) * m);
for (i = 0; i < m; i++)
a[i] = (double *)malloc(sizeof(double) * 2);
for (i = 0; i<m; i++) {
for (j = 0; j<2; j++) {
a[i][j] = linepoint[i][j];
}
}
ScanLineSegment(a, m);
}