0x00007FF7A57F2145 处有未经处理的异常(在 洼地提取.exe 中): 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。
报错的地方
//如果被搜索过或者不是洼地则跳过
if (searched[row][col]==1 || pit[row][col] <= 0){
return;
}
故障发生在访问动态申请的二维数据,相关代码如下:
// 初始化洼地搜索标记数组
int** initialize_searched(int row_count, int col_count) {
// 动态分配二维数组
int i, j;
int** searched = (int**)malloc(row_count * sizeof(int*));
for (i = 0; i < row_count; i++) {
searched[i] = (int*)malloc(col_count * sizeof(int));
}
// 初始化标记数组searched
for (i = 0; i < row_count; i++) {
for (j = 0; j < col_count; j++) {
searched[i][j] = 0;
}
}
return searched;
}
//初始化洼地数组
int** initialize_pit(int row_count, int col_count) {
int i,j;
int** pit = (int** )malloc(row_count * sizeof(int*));
if (pit == NULL) printf("内存分配失败");
for (i = 0; i < row_count; i++) {
pit[i] = (int*)malloc(col_count * sizeof(int));
if (pit[i] == NULL) printf("内存分配失败");
}
// 初始化洼地为0,正值是洼地
for (i = 0; i < row_count; i++) {
for (j = 0; j < col_count; j++) {
pit[i][j] = 0;
}
}
return pit;
}
for (row = 0; row < row_count; row++) {
for ( col = 0; col < col_count; col++) {
if (searched[row][col]==0 && pit[row][col] > 0) {
printf("%d %d", searched[row][col], pit[row][col]);
PitNode* newPit = (PitNode*)malloc(sizeof(PitNode));
newPit->next = NULL;
newPit->area = 0;
newPit->maxDepth = 0;
newPit->volume = 0;
calculatePit(row, col, searched, Spill, &newPit);
PitNode* p;
p = pitList->next;
pitList->next = newPit;
newPit->next = p;
totalArea += newPit->area;
totalVolume += newPit->volume;
totalNum++;
}
}
}