Problem ze wskaźnikami. Visual C++

0

Witam serdecznie!
Poniżej zamieszczam zadanie ze wskaźnikami wykonane w dwóch wersjach. W pierwszej w ogóle się nie kompiluje, a w drugiej program wywala mniej więcej w miejscu gdzie jest delete []tab; .

Oto kod:
Wersja 1
// lista5zad1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

int Horner (int n, int x){
int (*tab);
int y=0;
int u,b;

tab=(int(*)) calloc(n,sizeof(*tab));

if (tab == NULL) goto brak_pamieci;

for (u=0;u<=n;u++){
	fprintf(stderr,"Podaj wspolczynnik: ");
	scanf_s("%d",&tab[u]);
}
for (b=n;b>=0;b--)
	y=y*x+tab[b];
brak_pamieci:
free(tab);

return y;

}

int _tmain(int argc, _TCHAR* argv[])
{
int n,x,d;
fprintf(stderr,"Podaj stopien wielomianu: ");
scanf_s("%d",&n);
fprintf(stderr,"Podaj x: ");
scanf_s("%d",&x);

d=Horner(n,x);
printf("Wartosc wielomianu = %d\n",d);

return 0;

}

Wersja 2
// lista5zad1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

int Horner (int n, int x){
int (*tab);
int y=0;
int u,b;

tab = new int[n];
if (tab == NULL) goto brak_pamieci;

for (u=0;u<=n;u++){
	fprintf(stderr,"Podaj wspolczynnik: ");
	scanf_s("%d",&tab[u]);
}
for (b=n;b>=0;b--)
	y=y*x+tab[b];
brak_pamieci:
delete []tab;
return y;

}

int _tmain(int argc, _TCHAR* argv[])
{
int n,x,d;
fprintf(stderr,"Podaj stopien wielomianu: ");
scanf_s("%d",&n);
fprintf(stderr,"Podaj x: ");
scanf_s("%d",&x);

d=Horner(n,x);
printf("Wartosc wielomianu = %d\n",d);
return 0;

}

0

tab=(int(*)) calloc(n,sizeof(*tab)); < zamień na malloc
int (*tab); < bez nawiasów

0

wyskakują jeszce dwa następujące błędy:
'malloc': identifier not found
'free': identifier not found

0

Częściowo rozwiązałem mój problem. Po pierwsze powinno być calloc a nie malloc (czyli tak jak miałem). Po drugie trzeba było dodać bibliotekę: #include <cstdlib>. Jednak podczas działania program wysypuje się przy "free(tab);", czyli w odpowiedniku z drugiej wersji "delete []tab;".

0

w jednej i drugiej pętli wyłazisz poza zakresy tablic

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