Нет, как раз имел ввиду конечный, спасибо за поправку, вот у меня и получалось обращаться к неправильному блоку памяти. Элемент от которого начинается - тоже область с некоторым значением.
Спасибо за урок, разобрался.
Добавлю что если следом вызывать free(data); то можно словить крах, т.к. указатель уже находится за пределами выделенного блока, поэтому я сохранял стартовый адрес.
Вопрос, если я сохранил адрес начала чтобы сделать data = start; free(data); мог ли я сразу делать free(start); ? ведь идет ссылка на выделенный блок
Да, это опытным путем проверил. Про элементы спасибо, видимо не внимательно читал документацию (там как раз и был крах у меня).
Про void * знаю, очень понравилось играть с int64 как двумя int32, возможности кажутся безграничными =)
Про void *:
__int64 buffer = 1024;
void * data = malloc(buffer*sizeof(__int64)); // память по 1024 элемента размером 8 байт
тогда конечный элемент void * end = (__int64 *)data + 1024; правильно я понял?
Благодарю за развернутый ответ.
А правильно ли вычислять последний адрес: &tmp + количество элементов*sizeof(type) ?
Спрашиваю потому что пробую играть с void *
Добрался до дома, вот пример с таймером и обработкой нажатия...
time(&tBegin);
....
time(&tEnd);
dif = difftime(tEnd, tBegin);
if (tick < int(dif)) { ... }
....
char ch = _getch();
switch (ch)
{
case 75:
....
Спасибо за урок, разобрался.
Добавлю что если следом вызывать free(data); то можно словить крах, т.к. указатель уже находится за пределами выделенного блока, поэтому я сохранял стартовый адрес.
Вопрос, если я сохранил адрес начала чтобы сделать data = start; free(data); мог ли я сразу делать free(start); ? ведь идет ссылка на выделенный блок