问题总结
1.if()里条件为==而不是=,‘=’会使指针变为空指针从而引发异常。
2.注意一维动态数组sizeof(int*)而不是int。
3.记得及时释放动态内存。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n1, n2;
int** arr = NULL;
printf("请输入一维数组长度:");
scanf("%d",&n1);
printf("请输入二维数组长度:");
scanf("%d",&n2);//外层到里层申请
arr = (int**)malloc(n1*sizeof(int*));//注意强制转换类型为int** sizeof里应是int*
if (arr == NULL)//==
{
printf("内存分配失败。");
exit(0);
}
for (int i = 0; i < n1; i++)
{
*(arr + i) = (int*)malloc(n2*sizeof(int));
if (*(arr + i) == NULL)//==
{
printf("内存分配失败。");
exit(0);
}
}
for (int i = 0; i < n1; i++)//输入输出
{
for (int j = 0; j < n2; j++)
{
*(*(arr + i) + j) = j;
printf("%d ",*(*(arr+i)+j));
}
printf("\n");
}
for (int i = 0; i < n1; i++)//动态内存用完需手动释放
free(*(arr+i));//内层到外层释放
free(arr);
return 0;
}