Это назначение C для школы, но я сталкиваюсь с чем-то странным, что я не знаю, нормально это или нет.Маллок выделяет больше памяти, чем нужно?
Я должен принимать аргументы командной строки и пример одного является
-ia.b
так в моей программе я динамически выделять память с malloc
char *fileName = NULL;
fileName = malloc(strlen(argv[i]) * sizeof(char));
//error testing etc
strcpy(fileName, argv[i]);
Отлично работает, но я заглядываю в память через отладчик визуальной студии, это то, что стало выделено в памяти, где мне больше места, чем нужно d:
0x01608b98 "ÍÍÍÍÍýýýýB`\x1˜?`\x1\xf1¼O{º"
, если я бросаю таНос, такие как так fileName = (char*)malloc(strlen(argv[i]) * sizeof(char));
я получаю это выделяемой памяти:
0x009d8d38 "ÍÍÍÍÍýýýýB"
Учитывая, что мой аргумент 5 байт, является таНос выделение большего количества памяти, то он должен или я просто делаете это неправильно?
Это вполне возможно, что он выделит немного больше, чем вы просите. Но я не понимаю, как вы определяете, сколько выделяется. –
Да, реализация malloc часто выделяет больше памяти, чем вы запрашиваете для внутреннего использования. – d3L
Вполне возможно. Но это не будет защищать вас от недостатка **, где выделенная память точна, потому что 'strlen (argv [i])' должен быть '(strlen (argv [i]) + 1)', чтобы разрешить строку terminator для последующего 'strcpy'. –