C++/realloc

Lord Phoenix

Member
Joined
Mar 10, 2006
Messages
83
Reaction score
18
Location
Freenet
Насколько я знаю 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
210
Reaction score
58
Location
Питер
___ *(t+4)=new int(20); ____
зачем "+4" ? Указатели сами масштабируются при разыменовывании в зависимости от типа. В этой строке пишется что-то черт-знает куда, дальнейшее поведение непредсказуемо.
А вообще... Сколько раз твердили миру: не смешивайте Сишные маллоки и реаллоки с Плюсовыми Нью. И вообще, стараться в указатели не лезть, если это прога на плюсах. Специально же контейнеры есть..
 

wosp081

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