【问题标题】:is Malloc allocating more memory then needed?Malloc 是否需要分配更多内存?
【发布时间】:2017-07-06 02:45:41
【问题描述】:

这是学校的 C 作业,但我遇到了一些奇怪的事情,我不知道这是否正常。

我必须接受命令行参数,一个例子是

-ia.b

所以在我的程序中,我使用malloc动态分配内存

char *fileName = NULL;
fileName = malloc(strlen(argv[i]) * sizeof(char));
//error testing etc
strcpy(fileName, argv[i]);

工作正常,但我通过 Visual Studio 调试器查看内存,这是在内存位置分配的内容,对我来说,需要更多空间:

0x01608b98 "ÍÍÍÍÍýýýýB`\x1˜?`\x1\xf1¼O{º"

如果我像 fileName = (char*)malloc(strlen(argv[i]) * sizeof(char)); 这样转换 malloc,我会在内存中分配这个:

0x009d8d38 "ÍÍÍÍÍýýýýB"

考虑到我的参数是 5 个字节,malloc 分配的内存是不是应该分配的更多,或者我只是做错了?

【问题讨论】:

标签: c windows visual-studio pointers memory-management


【解决方案1】:

通常 malloc 分配的内存块是完全可以被等于 16 字节的段落大小整除的(即 malloc 分配具有基本对齐要求的块)。但是,您不应依赖 malloc 的这种内部行为。否则行为未定义。

【讨论】:

  • “段落大小”。你还在用DOS吗? ;)
  • @DanielKamilKozar 我没有检查 malloc 在当代操作系统中分配的最小内存大小。:)
猜你喜欢
  • 2019-08-13
  • 2020-02-28
  • 2021-11-27
  • 2021-12-31
  • 1970-01-01
  • 2010-10-12
  • 2014-03-28
  • 2013-11-14
相关资源
最近更新 更多