Я пытаюсь изменить размер массив символов, я следовал: Resizing a char[] at run timeДинамическая память изменения размера массив символов
затем:
я сделал что-то вроде этого:
// this crashes in runtime:
const long SIZE_X = 1048576;
char* Buffsz = new char(sizeof(char));
for(int i = 0; i < (SIZE_X - 2); i++)
{
Buffsz[i] = 'a';
if(realloc(Buffsz, sizeof(char) * i) == NULL) // autoallocate memory
cout << "Failled to reallocate memory!" << endl;
}
но если я это сделаю:
// this works without problems.
const long SIZE_X = 1048576;
char* ABuffsz = new char[SIZE_X];
for(int i = 0; i < (SIZE_X - 2); i++)
{
ABuffsz[i] = 'a';
}
cout << "End success! len: " << strlen(ABuffsz) << endl;
Для меня это должно быть хорошо, но если это неправильно, w i может автоматически выделять память?
P.S: Я знаю об использовании std::vector
, но я хочу использовать это, если возможно.
Это простой пример, 'SIZE_X', это просто предел для первого примера. – nikomaster
realloc выделяет * новый * блок. Но в вашем коде Buffsz продолжает указывать на старый блок, который только что был освобожден. Кроме того, ваш код выделяет один символ, записывает в первый элемент, перераспределяет его на * zero * chars, записывает во второй элемент (который не существует), перераспределяется на один символ, записывается в третий элемент (который не есть), ... – immibis