【发布时间】: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 分配的内存是不是应该分配的更多,或者我只是做错了?
【问题讨论】:
-
它完全有可能分配比你要求的多一点。但我不清楚您如何确定分配了多少。
-
很有可能。但这不会保护您免受确切分配内存的不足,因为
strlen(argv[i])应该是(strlen(argv[i])+1)以允许后续strcpy的字符串终止符。 -
还要注意
sizeof(char)的定义是1。* sizeof(char)真的没必要。
标签: c windows visual-studio pointers memory-management