Obsługa obiektu polinom

0

Cześć, mam za zadanie napisać obsługe obiektu "POLINOM". Podczas inicjalizacji pojawia mi się błąd zglaszania wątku. W jaki sposób mogę zainicjalizować obiekt "ob".

struct NODE_COORD
{
	double *coord;  //coord[0] - x, coord[1] - y
};

struct POLINOM
{
	int NoVertexes;   //nuber of vertexes
	NODE_COORD *crd;  //crd[0] - vertex 0;  crd[1] - vertex 1, ...
};
int _tmain(int argc, _TCHAR* argv[])
{
	POLINOM triangle;
	NODE_COORD tab[3];
	int i;

	for(i=0; i<3; ++i)
	{
		tab[i].coord = (double *)malloc(2*sizeof(double));
		if(!tab[i].coord)
			crash("memory alloc. error");

		tab[i].coord[0] = (i+1)*i;
		tab[i].coord[1] = (i+3)/(i+1);
	}
	if (!POLINOM_Init(&triangle, 3, tab))
return 0;
bool POLINOM_Init(POLINOM *ob, size_t NoVertexes, NODE_COORD *arr)
{
	for (int i = 0; i < NoVertexes; i++) {
		ob = (POLINOM*)malloc(NoVertexes * sizeof(POLINOM));
		if (!ob)
			return true;
	}
	memset((void*)ob, 0, NoVertexes * sizeof(POLINOM));

	ob->crd[0] = arr[0];
	ob->crd[1] = arr[1];
	return false;
}
1

Trzy razy próbujesz zaalokować pamięć na ten sam wskaźnik:

    for (int i = 0; i < NoVertexes; i++) {
        ob = (POLINOM*)malloc(NoVertexes * sizeof(POLINOM));
        if (!ob)
            return true;
    }

Dodatkowo nie wiem po co rzutujesz swój wskaźnik na void*

memset((void*)ob, 0, NoVertexes * sizeof(POLINOM));

Trochę przekombinowałeś swój kod...


edit:
O wiele większy błąd jest jednak tutaj:

    ob->crd[0] = arr[0];
    ob->crd[1] = arr[1];

Owszem, alokujesz zasoby na tablicę struktur ob, jednak każda z tych struktur zawiera w sobie *crd:

struct POLINOM
{
    int NoVertexes;   //nuber of vertexes
    NODE_COORD *crd;  //crd[0] - vertex 0;  crd[1] - vertex 1, ...
};

a tego już nie alokujesz nigdzie, jednak za chwilę próbujesz odwołać się do jego kolejnych elementów.

Rozwiązanie:
Dla każdej struktury musisz także zaalokować wskaźniki, które przechowuje.

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