You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言指针变量k在函数返回后值异常重置问题求助

内存值异常问题:指针返回后数值被重置

我碰到一个搞不懂的内存问题(大概率是自己哪里漏了)。在cw()函数里初始化了一个int类型指针k,把它传给cw_savings()函数后,这个函数的循环里k被递增到了42,循环里一切正常,但回到cw()函数后,k的值居然变回了7。

typedef struct {
    float saving;
    int debut;
    int fin;
} Savings;

void cw_savings(float** matrice, int n, int n_hangar, Savings* savings,int * k) {
    for (int i = 1; i < n; i++) {
        for (int j = 1; j < n; j++) {
            if (i == j) {
                continue;
            } else {
                savings[(*k)].saving = matrice[i][n_hangar] + matrice[n_hangar][j] - matrice[i][j];
                savings[(*k)].debut = i;
                savings[(*k)].fin = j;
                printf("k=%d , adresse = %p\n",(*k),k);
                (*k)= (*k)+1;
            }
        }
    }
    printf("k final=%d, adresse = %p\n",(*k),k);
    //QuickSort(savings, 0, n - 2);
    qsort(savings,(*k),sizeof(Savings),comp);
}

int** cw(float** matrice, int n,int n_hangar, int vehicule_capacity,int* poids){
    Savings* saving = calloc(((n - 1) * (n - 1) - n-1),sizeof(Savings));
    int* k = calloc(1,sizeof(int));
    (*k) = 0;
    cw_savings(matrice, n, n_hangar, saving,k);
    int** res = initialisation(n-1);
    cw_merge(res, saving ,vehicule_capacity,poids, n-1,(*k));
    free(saving);
    return res;
}

int main() {
    int n = 8; 
    int n_hangar = 0; 
    int vehicule_capacity = 30;
    int poids[] = {6,8,3,9,1,3,5};
    float** matrice = calloc((n), sizeof(float*));  

    for (int i = 0; i < n; i++) {
        matrice[i] = (float*)calloc(n,sizeof(float));
    }
    // 初始化并填充矩阵的模拟值
    float t1 []= {0, 214.1, 378.2, 361.7, 231.7, 523.4, 308.8, 299.7};
    float t2 []= {163.2, 0, 164.1, 311.5, 284.1, 393.8, 309.1, 203.6};
    float t3 []= {321.1, 157.9, 0, 371.5, 344.1, 539.5, 369.1, 263.6};
    float t4 []= {344.1, 303., 311.5, 0, 215.7, 595.6, 133.2, 121.1};
    float t5 []= {222.1, 268.8, 277.3, 221.7, 0, 595, 168.8, 159.7};
    float t6 []= {497.2, 421.8, 518.2, 642.51, 638.2, 0, 663.2, 581.3};
    float t7 []= {299.5, 296.1, 304.6, 160.1, 171.1, 622.3, 0, 119.6};
    float t8 []= {286.6, 187.4, 195.9, 120.1, 160.5, 513.6, 121.0, 0};

    for (int i =0; i<n;i++){
        matrice[0][i] = t1[i];
        matrice[1][i] = t2[i];
        matrice[2][i] = t3[i];
        matrice[3][i] = t4[i];
        matrice[4][i] = t5[i];
        matrice[5][i] = t6[i];
        matrice[6][i] = t7[i];
        matrice[7][i] = t8[i];
    }

    int** resultat = cw(matrice,n,n_hangar,vehicule_capacity,poids);

    for (int i = 0; i < n; i++) {
        free(matrice[i]);
    }
    free(matrice);
    printf("[");
    for (int i =0; i<n-1;i++){
        printf("%d",resultat[0][i]);
    }
    printf("]");
    printf("[");
    for (int i =0;i<n-1;i++){
        if (resultat[0][i] == 0){
            continue;
        }
        printf("[");
        for (int j = 0;j<resultat[0][i]+2;j++){
            printf("%d,",resultat[i+1][j]);
        }
        printf("]");
        free(resultat[i+1]);
    }
    printf("]");
    free(resultat[0]);
    free(resultat);

    return 0;
}

我试过各种办法,换电脑、用在线编译器都试过,问题还是没解决。

内容的提问来源于stack exchange,提问作者Alphatality

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 10:40:10