![]() |
С++ Builder проблема с кучей
Если выделить память в куче любым способом хоть то malloc/free,new/delete,HeapAlloc/HeapFree И что то в ней парсить текстовое с помощью memset,strcpy,strcat и т.д. То кодегвард матерится на каждую такую операцию AccessOverrun типо в блок памяти размера Х пытаются что то запихать размером Х+1байт ,и это независит от количества памяти выделенной под переменную ,все равно будет +1байт :( Вроде бы так ничего ,программа невылетает.НО.Если парсить очень много данных.То при вызове free,delete вылазит AccessViolation :mad: в это случае кодегвард говорит что это "Bad Array" Тоесть место распожение данных в куче куда сдвигается и освободить память становится проблематично :( Как можно боротся с такой фигней?Ибо если перед завершением ф-ции неосвобождать память то она очень заметно течет.
ЗЫ:BDS 2006 |
Цитата:
|
Цитата:
Код:
char *globbuf=new char[1024]; |
когда память выделяешь ее нужно почистить.. там мусор обычно. вот strlen и вылезает за пределы
|
Цитата:
|
Цитата:
Код:
new *buf=new char[1024];Код:
new *buf=new char[1024]; |
Цитата:
|
Что то вы ***ню пишете господин, только что проверил
Код:
char *buf;как раз таки о чём и говорил FoX's. |
Цитата:
|
Про то что массив начинается с 0 а не с 1 автор знает? Крайнее значение (учитывая нулевой байт) = buf[1022]
buf[1023] = '\0' Скорее всего ошибка присвоения за границы массива по ходу дальнейшего кода. У меня этот кусок компилится прекрасно |
Конкретно в таком коде ошибок нету:
Код:
#include <string.h> |
Цитата:
|
Да уж.....6й с++ билдер класная весчь была.А теперь оно непонятно в что выродилось :( Буду потихоньку на Visual C++ Studio переходить
|
Код:
new *buf=new char[1024]; |
| Время: 04:34 |