2017-02-16 63 views
1

这是学校的C作业,但我遇到了一些奇怪的事情,我不知道它是否正常。是Malloc分配更多的内存,然后需要?

我必须采取命令行参数和一个的一个例子是

-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{º" 

,如果我投的malloc如这样fileName = (char*)malloc(strlen(argv[i]) * sizeof(char));我得到这个分配的内存:

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

考虑到我的说法是5个字节,是的malloc分配更多的内存,那么它应该还是我只是做错了吗?

+2

这是完全可能的,它会分配多一点比你所要求的。但我不清楚你如何确定分配的数量。 –

+0

是的,malloc实现通常分配的内存超过您请求的内存使用量。 – d3L

+3

很可能。但是这不会保护你免受分配的内存不足所造成的短缺,因为'strlen(argv [i])'应该是'(strlen(argv [i])+ 1)'以允许字符串后续的'strcpy'的终止符。 –

回答

3

通常,malloc以大小等于16字节(即malloc分配具有基本对齐要求的块)可分割的区块分配内存。但是,您不应该依赖malloc的这种内部行为。否则,行为是不确定的。

+1

。你还用DOS多吗? ;) –

+0

@DanielKamilKozar我没有检查malloc在当代操作系统中分配的最小内存大小。 –

相关问题