我在執行動態矩陣時遇到了一些麻煩。 從理論上講,我似乎很清楚自己必須做什麼,並且我已經閱讀了本網站上的一些類似問題(以及其他資源)。雖然,下面非常簡單的代碼不起作用。 你介意如何找出錯誤嗎?嘗試在C中實現動態大小矩陣。錯誤在哪裏?
#include <stdio.h>
#include <stdlib.h>
int main() {
int dim1 = 10; // #Rows
int dim2 = 4; // #Columns
int i;
int j;
double **mtrx = (double **)malloc(sizeof(double **) * dim1);
// mtrx is my dynamic matrix, of size dim1*dim2 //
for (i = 0; i < dim1; ++i)
mtrx[i]= (double *)malloc(sizeof(double *) * dim2);
// (1) Inizialize//
for (i = 0; i < dim1; ++i) {
printf("(%d):\t", i);
for (j = 0; j < dim2; ++j) {
mtrx[i][j] = i;
printf("mtrx[%d][%d] = %.f ", i, j, mtrx[i][j]);
}
printf("\n");
}
// (2) Show the results//
printf("\nShow the results:\n");
for (i = 0; i < dim1; ++i) {
printf("(%d):\t", i);
for (j = 0; j < dim2; ++j)
printf("mtrx[%d][%d] = %.f ", i, j, mtrx[i][j]);
printf("\n");
}
// (3) Free the memory
printf("\n***free the memory***\n");
for (i = 0; i < dim1; ++i)
free(mtrx[i]);
free(mtrx);
return 0;
}
我的代碼的目的如下。 首先,聲明尺寸爲dim1 * dim2(即「dim1」行和「dim2」列)的動態矩陣。 比階段(1),初始化每個元素遵循一個簡單模式(mtrx [i] [j] = i)。 請注意,這裏有一個「超出」的printf指令:爲了「調試」目的,我添加了它以確保初始化過程的正確性(看起來工作正常)。 然後,階段2,我展示了結果,最後我釋放了使用的內存。
的問題是:
- 相2未示出的結果 「正確」;
- 在免費階段,我得到像
*** free()的一個錯誤:無效的下一個尺寸(快)...
我的犯罪嫌疑人:我可能有錯誤爲我的矩陣聲明內存,導致數據溢出並與「free」指令不兼容,但不幸的是我無法找到該錯誤。
我提前感謝您的任何幫助!
在第一個'malloc'中,您需要使用'sizeof(double *)'和第二個'sizeof(double)'。祝你好運。 –
天哪,你是對的!非常非常感謝你! ;) – user233650
不客氣。 –