“程序已触发断点,同时分配了可用内存

问题描述 投票:0回答:1

当我释放内存时,发生错误“程序已触发断点”。检查下面的代码,我想知道哪里错了吗?

 int SSavep(char *visited, int t, int n, int m)
    { 

        int* map = (int*)malloc(m*n * sizeof(int));
        int* q = (int*)malloc(m*n * sizeof(int));
        int count = 0, cur = 0;
        int begin = 0, end = 0;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                //set value for map
            }
        }
        ..........
        if (t >= map[end]) {
            free(map);
            free(q);
            return 0;
        }
        else{
            free(map);
            free(q);
            return -1;
        }
    }  
malloc free
1个回答
0
投票

整个代码如下:

static int dir [4] [2] = {{0,1},{0,-1},{1,0},{-1,0}};

int SSavep(char * visited,int t,int n,int m){

int* map = (int*)malloc(m*n * sizeof(int));
int* q = (int*)malloc(m*n * sizeof(int));
int count = 0, cur = 0;
int begin = 0, end = 0;
for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) {
        if (visited[i*n + j] == '.')
            map[i*n + j] = 0;
        else if (visited[i*n + j] == '*')
            map[i*n + j] = -1;
        else if (visited[i*n + j] == 'p') {
            map[i*n + j] = -12;
            end = i*n + j;
        }
        else {
            map[i*n + j] = -9;
            begin = i*n + j;
        }   
    }
}

q[count++] = begin;
while (cur < count && q[cur] != end) {
    int i = q[cur] / n;
    int j = q[cur] % n;
    for (int k = 0; k < 4; k++) {
        int ni = i + dir[k][0];
        int nj = j + dir[k][1];
        if (ni < 0 || ni >= m || nj < 0 || nj >= n || map[ni*n + nj]>0 || map[ni*n + nj] == -1)
            continue;
        map[ni*n + nj] = map[i*n + j] + 1;
        q[count++] = ni*n + nj;
    }
    cur++;
}
if (map[end] > 0 && t >= map[end]) {
    free(map);
    free(q);
    return 0;
}
else{
    free(map);
    free(q);
    return -1;
}

}

© www.soinside.com 2019 - 2024. All rights reserved.