Memory corruption

0

Witam.
Cały czas dostaję error "memory corruption in malloc()" podczas wywolywania malloca w tej linii:
values = (T *) malloc(sizeOfQueue * sizeof(T));

gdzie values to wskaznik na T, czyli szablon, ktory w trakcie wykonywania jest obiektem 12 bajtowym (i tyle zwraca sizeof(T)).
Jakie moga byc przyczyny?

1

Jakie moga byc przyczyny?

Czy T to parametr szablonu czy nazwa funkcji(klasy, struktury)?

Zaznaczasz, że piszesz w C++ i używasz funkcji z C do alokowania pamięci.
Skorzystaj z std::unique_ptr<> lub innego smart_pointera.

template <typename T>
class Foo
{
	T val;
public:	
	Foo(){}
	T getVal(){ return val; }
	void setVal(int num){ val = num; }
};

int main()
{
	const int SIZE = 2;
	std::unique_ptr<Foo<int>[]> Queue(new Foo<int>[SIZE]);
	Queue[0].setVal(5);
	Queue[1].setVal(6);
	for (int i = 0; i < SIZE; i++)
	{
		std::cout << Queue[i].getVal() << ' ';
	}
} 

Opcja dla malloc()

Foo<int>* values;
	values = (Foo<int>*)malloc(SIZE * sizeof(Foo<int>*));
	values->setVal(10);
	(values + 1)->setVal(20);
	for (int i = 0; i < SIZE; i++)
	{
		printf("%i ", (values + i)->getVal());
	} 
3
carlosmay napisał(a):

Zaznaczasz, że piszesz w C++ i używasz funkcji z C do alokowania pamięci.
Skorzystaj z std::unique_ptr<> lub innego smart_pointera.

Używanie std::unique_ptr dla tablic dynamicznych to bardzo dziwny pomysł..

Do tego służy std::vector.

0
sztukers napisał(a):

Witam.
Cały czas dostaję error "memory corruption in malloc()" podczas wywolywania malloca w tej linii:
values = (T *) malloc(sizeOfQueue * sizeof(T));

gdzie values to wskaznik na T, czyli szablon, ktory w trakcie wykonywania jest obiektem 12 bajtowym (i tyle zwraca sizeof(T)).
Jakie moga byc przyczyny?

Przyczyna może być tylko jedna. W innym miejscu programu piszesz poza zakresem alokowanej tablicy, co powoduje nadpisywanie struktury opisującej heap. W momencie kiedy malloc natrafia an te nieprawidłowe dane, musi zatrzymać program z opisanym błędem.

albo zrobiłeś śmieszy błąd i sizeOfQueue jest niedodatnie (lub wręcz ujemne).

1 użytkowników online, w tym zalogowanych: 0, gości: 1