c - 带 malloc 的二维数组
问题描述
我正在学习 C 语言,但我在编写用于练习目的的程序时遇到了问题。
在这个程序中:我通过在用户设置表的行和列后分配内存来创建一个动态的二维表(数组)。
然而,程序将执行到最后,只有当表的行设置为非常低的值时,例如最多 2-3 行。
设置更多的行数将导致程序退出。
查看程序运行到最后并最终打印表值的唯一方法是提前暂停执行(就像您在下面粘贴的代码中看到的那样)。
这种行为有什么解释吗?我有什么遗漏或做错了吗?
main()
{
int **p;
int i, j, N, M;
printf("Set Table Rows: ");
scanf("%d", &M);
printf("Set Table Columns: ");
scanf("%d", &N);
p = malloc(sizeof(int) * M);
system("echo \"Press any button to continue\"");
system("read");
if (!p)
{
printf("Memory Allocation Failed!");
exit(0);
}
for (i = 0; i < M; i++)
{
p[i] = malloc(sizeof(int) *N);
if (!p[i])
{
printf("Memory Allocation Failed!");
exit(0);
}
}
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
p[i][j] = (i+2) * (j+1);
}
}
printf("\n-------------------\n");
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
printf("%d\t",p[i][j]);
}
printf("\n");
}
}
解决方案
推荐阅读
- windows - 如何使用 Powershell 检查操作系统架构(32 位或 64 位)?
- moodle - 由于没有此类活动,因此无法在 Moodle 中创建考勤
- java - 使用tomcat9 + Memcache时,会话之间的HttpSession对象变为空
- spring - DatastoreException:给定的键没有字符串名称值,但尝试转换为字符串
- sql - 当 dblink 失败时,使用 UNION 的视图无法返回查询的第一部分的结果
- python - 用于 systemd 服务的 Python ImportError
- c# - 如何使用c#在txt文件的每一行中设置前缀和删除字符后
- javascript - forloop 麻烦,未定义的问题
- if-statement - If/Then 语句写入,用于从另一个单元格中提取空白单元格
- python - 使用跨度对象。[斯帕西,蟒蛇]