1. 程式人生 > 其它 >C語言:使用malloc申請一個二級指標,外層為3個元素,內層為5個元素。使用並釋放。

C語言:使用malloc申請一個二級指標,外層為3個元素,內層為5個元素。使用並釋放。

//使用malloc申請一個二級指標,外層為3個元素,內層為5個元素。使用並釋放。
#include"head.h"
int main() {
int **p = (int **)malloc(sizeof(int *) * 3);
for (int i = 0; i < 5; i++) {
p[i] = (int *)malloc(sizeof(int) * 5);
}

//使用元素
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
p[i][j] = i + j;
}
}

//打印出元素
for (int i = 0; i < 3
; i++) { for (int j = 0; j < 5; j++) { printf("%d ", p[i][j]); }; printf("\n"); } //釋放內層 for (int i = 0; i < 3; i++) { free(p[i]); } //釋放外層 free(p); return EXIT_SUCCESS; }

 

總是出錯,Visual studio報中斷。於是開始檢查:

發現給二級指標申請了三個指標儲存位 但是卻使用了五個

更改後為:

 

//使用malloc申請一個二級指標,外層為3個元素,內層為5個元素。使用並釋放。
#include"head.h"
int
main() { int **p = (int **)malloc(sizeof(int *) * 3); for (int i = 0; i < 3; i++) { p[i] = (int *)malloc(sizeof(int) * 5); } //使用元素 for (int i = 0; i < 3; i++) { for (int j = 0; j < 5; j++) { p[i][j] = i + j; } } //打印出元素 for (int i = 0; i < 3; i++) { for (int j = 0; j < 5; j++) { printf("%d
", p[i][j]); }; printf("\n"); } //釋放內層 for (int i = 0; i < 3; i++) { free(p[i]); } //釋放外層 free(p); return EXIT_SUCCESS; }