这是学校的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{º"
如果我转换malloc如fileName = (char*)malloc(strlen(argv[i]) * sizeof(char));
那么我在内存中分配这个:
0x009d8d38 "ÍÍÍÍÍýýýýB"
考虑到我的参数是5个字节,malloc是否应该分配更多内存呢?或者我只是错误地执行此操作?
答案 0 :(得分:3)
通常malloc以块的形式分配内存,可以被段大小等于16字节整除(即malloc分配具有基本对齐要求的块)。但是,您不应该依赖malloc的这种内部行为。否则行为未定义。