C++/realloc

Lord Phoenix

Местный
Регистрация
10 Мар 2006
Сообщения
81
Реакции
18
Credits
124
Насколько я знаю realloc выделяет новый участок памяти ,копирует содержимое старого и удаляет старый.
но почему то этот код не работает.
Код:
#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

Местный
Регистрация
22 Фев 2004
Сообщения
210
Реакции
59
Credits
0
___ *(t+4)=new int(20); ____
зачем "+4" ? Указатели сами масштабируются при разыменовывании в зависимости от типа. В этой строке пишется что-то черт-знает куда, дальнейшее поведение непредсказуемо.
А вообще... Сколько раз твердили миру: не смешивайте Сишные маллоки и реаллоки с Плюсовыми Нью. И вообще, стараться в указатели не лезть, если это прога на плюсах. Специально же контейнеры есть..
 
W

wosp081

Указатели нужны в основном для оптимизации или хранения в контейнере производных классов