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
相关产品推荐
相关产品推荐

