程序代码:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int **p = NULL; //最好是显式初始化这个二级指针 以防不测
int m, n, i, j;
scanf("%d%d", &m, &n);
p = malloc(sizeof(int*)*m); //这里没必要强制类型转换 p已定义成int**
if(!p) { //作个简单的malloc是否成功的检测
printf("malloc失败!\n");
return 1; //失败后直接退出程序
}
for(i = 0; i < m; i++) {
p[i] = malloc(sizeof(int) * n);
if(!p[i]) { //还是要检测内存开辟是否成功
printf("i = %d\tmalloc失败!\n", i);
return 1; //失败后直接退出程序
}
}
//这里也没必要强制类型转换 p[i]默认就是int*
for(i = 0; i < m; i++) {
for(j = 0; j < n; j++) {
scanf("%d", &p[i][j]); //这里要用& 因为p[i][j]是int型
//或者你改成 *(p + i) + j
//scanf("%d", *(p + i) + j);
}
}
for(i = 0; i < m; i++) {
for(j = 0; j < n; j++) {
printf("%d ", p[i][j]);
}
printf("\n");
}
for(i = 0; i < m; i++) free(p[i]); //由里层开始释放开辟的内存
free(p); //只要malloc了就别忘了free
return 0;
}
图片附件: 游客没有浏览图片的权限,请
登录 或
注册
图片附件: 游客没有浏览图片的权限,请
登录 或
注册