<!--QuoteBegin-Herbert+23:08:2007, 22:47 -->
<span class="vbquote">(Herbert @ 23:08:2007, 22:47 )</span><!--QuoteEBegin-->Как я понял тут такая фигня:
free не знает о количестве памяти которую надо освободить. Он освобождает сразу ВСЮ память, которую указатель nVec держит (в данном случае 40 байт - по 4 на каждую int). Указатель конечно "знает" сколько он держит, но получить это значение от него нельзя. Это точно (я где-то такую тему уже видел, там про динамические массивы речь шла). То есть имея указатель nVec ты не можешь от него получить инфу о количестве захваченной им памяти. Эту цифру 40 нужно с самого начала запомнить и бережно хранить (как и сам указатель), иначе не будешь знать сколько значений int под nVec запихнуть можно. Указатель тебе этого не скажет.
Выполнив строку nVec+=5; ты уже безвозвратно потерял возможность вернуть эти 40 байт т.к. "убил" указатель который "знал" о количестве захваченной памяти и адресе ее начала.
[snapback]76216" rel="nofollow" target="_blank[/snapback]
[/quote]
указатель ничего не держит.. он УКАЗЫВАЕТ.
осмелю предположить если сделать
Код:
int *nVec = (int*)malloc(10 * sizeof(int));
nVec+=5;
nVec-=5;
free(nVec);
все пройдет успешно.
Кто знает откуда free знает сколько нужно освободить памяти? Он хранит где нибудь такую информацию?
зависит от реализации, если не ошибаюь МС хранит в четырех байтах перед выделенным блоком.
Где про такие вещи можно прочитать не знаешь? Хотя бы на английском
Зачем? За использование таких нюансов комптляторов -- руки в косяк.