C++/realloc

Lord Phoenix

Member
Joined
Mar 10, 2006
Messages
86
Reaction score
18
Насколько я знаю realloc выделяет новый участок памяти ,копирует содержимое старого и удаляет старый.
но почему то этот код не работает.
Code:
#include <stdio.h>
#include <windows.h>
int main()
{
	int **t;
	unsigned long sz=0;
	t=(int**)malloc((sz+=1)*4);
	*t=new int(10);
	t=(int**)realloc(t,(sz+=1)*4);
	*(t+4)=new int(20);
	t=(int**)realloc(t,(sz+=1)*4);
	*(t+8)=new int(30);
	for (unsigned long i=0;i<sz;i++)
	{
		printf("%d\n",**(t+i*4));
	}
}
выкидывает ошибку на втором элементе, при этом с первым и третим все ок.
компилятор mingw 3.4.2
 

waldo

Member
Joined
Feb 22, 2004
Messages
211
Reaction score
58
___ *(t+4)=new int(20); ____
зачем "+4" ? Указатели сами масштабируются при разыменовывании в зависимости от типа. В этой строке пишется что-то черт-знает куда, дальнейшее поведение непредсказуемо.
А вообще... Сколько раз твердили миру: не смешивайте Сишные маллоки и реаллоки с Плюсовыми Нью. И вообще, стараться в указатели не лезть, если это прога на плюсах. Специально же контейнеры есть..
 

wosp081

Member
Joined
Nov 22, 2008
Messages
14
Reaction score
0
Указатели нужны в основном для оптимизации или хранения в контейнере производных классов
 

Jasur

Member
Joined
Dec 2, 2006
Messages
31
Reaction score
2
"Lol, realloc can be a nightmare to work with, especially if you're dealing with large chunks of memory. I've had instances where it's crashed my program or returned null pointers. Anyone have any solid strategies for memory management in C++?"
 
Top