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;
}

 

posted on 2022-04-19 14:11  AnonymousJDK  阅读(187)  评论(0编辑  收藏  举报

导航