【问题标题】:Problems with heap, PC freezes堆问题,PC 死机
【发布时间】:2014-11-03 12:30:05
【问题描述】:

我正在处理一个动态分配的矩阵。特别是我有这个代码(在 C 中):

int i, n, m;
char **matrix;
matrix = (char **)calloc((n, sizeof(char *));
for (i = 0; i <= n; ++i) {
    matrix[i] = (char *)calloc(m, sizeof(char))
}

如果“n”足够小,程序运行良好,但如果我大幅增加它(例如,我取一个接近常量 INT_MAX 的值,在我的情况下 INT_MAX 是 2.147.483.647),我的电脑会死机,我必须重新启动它。我想这个问题与堆最大大小有关。有没有可能以某种方式阻止它?或者你建议给'n'的增长设定一个合理的上限?

提前致谢!

【问题讨论】:

  • 顺便说一句 i &lt;= n --> i &lt; n

标签: c matrix dynamic heap-memory calloc


【解决方案1】:

INT_MAX 是 2GB 内存。您为每一行使用了那么多内存,因此您的矩阵超出了您的内存容量。

【讨论】:

  • 如果你有超过 1 行,再加上操作系统的内存,你就超过了你的内存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
相关资源
最近更新 更多