【问题标题】:Checking size of allocated memory检查分配内存的大小
【发布时间】:2017-04-07 14:18:30
【问题描述】:

我正在编写一个程序,它接受数组的大小作为参数,然后应该为该大小动态分配内存。

我希望我的程序返回分配的内存大小。 目前我使用argv 读取输入值,然后使用mmap 进行动态分配。我还使用了一个 for 循环来显示数组的每个索引中保存的数字。

我知道可以使用malloc 进行分配,但我无法使用它。 我想我需要从最后一个元素开始检查所有单元格,直到收到 SEGFAULT 信号。

感谢您的帮助。

编辑: 没有库等的短代码......

input = (atoi(argv[1]));
int* arr = mmap(0, input, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, fd, 0);

for (i = 0; i < input; i++) {
    arr[i] = i + 1; 
}

【问题讨论】:

  • 为什么你不能使用malloc?
  • "检查所有单元格,直到我得到 SEGFAULT"。这对我来说看起来很狡猾。如何保证 SEGFAULT?
  • @CherubimAnand 已编辑。
  • @Someprogrammerdude 目前没有崩溃,我得到了所有的值,但我不知道如何获取分配的内存大小。
  • XY 问题和非常错误的方法。不清楚你试图解决什么,但引发未定义的行为绝对是错误的。这就像试图通过将钉子钉入墙上直到产生火花来在墙上找到电线。不要再走那条路了!使用malloc 分配内存有什么问题?您应该提供更多详细信息和minimal reproducible example

标签: c dynamic-allocation


【解决方案1】:

您无法检查 C 中分配的空间量或数组的大小。您需要自己显式将其保存为变量。

【讨论】:

  • 所以使用 mmap 我无法检查分配了多少内存?使用 mmap 更好的 void?或者可以使用 mmap 解决这个问题?
  • @F.Mark mmapmalloc 问题是一样的。当您分配内存时知道您分配了多少,只需跟踪该数字即可。而已。期间。
  • @MichaelWalz 所以这可以通过存储内存的默认大小并将其与分配后的大小进行比较来解决?因为我希望我的程序打印出“你分配了 5MB 的内存”。
  • @F.Mark 我不明白你的问题。分配的内存量在input 变量中。 默认内存大小是什么意思?没有这样的事情。
  • @F.Mark 如果你输入 5,你刚刚分配了 5 个字节,大约是 0.000005 MB。您存储在数组中的内容与大小无关
猜你喜欢
  • 2018-11-15
  • 2014-04-04
  • 2015-05-08
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 2023-03-03
  • 2010-11-06
  • 2022-11-23
相关资源
最近更新 更多