iT邦幫忙

0

出現 Segmentation fault (core dumped) 的原因為何?

  • 分享至 

  • xImage

過年太無聊就解程式題目,但有一題真的讓我百思不得其解,題目如下:
https://zerojudge.tw/ShowProblem?problemid=c178

這題的第 13、14、15 組測資都會顯示 「記憶體區段錯誤!
Segmentation fault (core dumped)」,但我很納悶到底哪裡會存取不該存取的地方🤔

程式碼如下

#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
#define min(a, b)(a > b ? b : a)
void travel();
int **map,**dp,n;
main()
{
    scanf("%d", &n);
    map = (int **)calloc(n, sizeof(int *));
    dp = (int **)calloc(n, sizeof(int *));
    for(int i = 0 ; i < n ; i++)
    {
        map[i] = (int *)calloc(n, sizeof(int));
        dp[i] = (int *)calloc((1 << (n - 1)), sizeof(int));
    }
    int distance;
    for(int i = 0 ; i < n ; i++)
    {
        for(int j = 0 ; j < n ; j++)
        {
            scanf("%d", &distance);
            map[i][j] = distance;
        }
        dp[i][0] = map[i][0];
    }
    travel();
    printf("%d\n", dp[0][(1 << (n - 1)) - 1]);
    free(map);
    free(dp);
}
void travel()
{
    for(int j = 1 ; j < 1 << (n - 1) ; j++)
    {
        for(int i = 0 ; i < n ; i++)
        {
            dp[i][j] = INT_MAX;
            if(j >> (i - 1) & 1)
            {
                continue;
            }
            for(int k = 1 ; k < n ; k++)
            {
                if(!(j >> (k - 1) & 1))
                {
                    continue;
                }
                dp[i][j] = min(dp[i][j], map[i][k] + dp[k][j ^ (1 << (k - 1))]);
            }
        }
    }
}

請問問題是出在哪呢🥺

SunM0on iT邦新手 4 級 ‧ 2024-02-16 14:52:07 檢舉
節點間距離確定是int嗎,怎麼好像沒看到題目有寫
vuj8104 iT邦新手 4 級 ‧ 2024-02-19 11:22:26 檢舉
題目有寫整數喔
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答