Почему при выделении памяти через malloc выделяеться памяти больше указанного
#include <windows.h>
#include <iostream>
int main()
{
char *key = (char*)malloc(25);
if(key != 0)
{
SecureZeroMemory(key, 25);
}
for(int i = 0;i < 26;i++)
{
key[i] = 'a';
}
std::cout << lstrlenA(key);
}
Вывод
38
Почему при выделении памяти размер key равен 38 если я указываю 25? Дело в lstrlenA или в какой-то особенности выделения памяти через malloc?
Ответы (1 шт):
Вы выделили 25 байт, все их забили символом a, т.е. у вас вышло в памяти что-то вроде
aaaaaaaaaaaaaaaaaaaaaaaaa#@%$@@#^$^^%^%$^%#%^^%$#%...
где после a идет что-то, что записано в памяти за пределами выделенного вам места. Может, мусор, может, служебные данные менеджера памяти.
lstrlenA ищет количество символов от насчала строки, переданной как указатель в функции, и до первого нулевого символа, обозначающего конец строки. Вы в свои 25 байт такой символ не писали, так что функция пошла искать дальше, за пределами - уже В ЧУЖОЙ памяти.
Вы просто неверно интерпретируете возвращаемый функцией результат.