Code blocks a visual

0

Witam, jestem początkującą osobą, chciałem napisać program porównujący szybkość działania na tablicy bez wskaźników oraz z ich użyciem.
Długo nad nim myślałem bo nie chciał działać poprawnie. Nawet już zacząłem przepisywać słowo w słowo kod z poradników na yt lecz dalej nie działał.
Ostatecznie doszedłem do wniosku że w Code Blocksie działa poprawnie a w Visualu wysypuje się na pomiarze z użyciem wskaźnika. Czy mógłby ktoś mi
wytłumaczyć w czym problem ? Dodam że jeśli zakomentuje pierwszy pomiar program zadziała.

#include <iostream>
#include <time.h>
#include <cstdlib>
using namespace std;
int ile;
double czas;
clock_t stop, start;

int main()
{
	cout << "Ile liczb: ";
	cin >> ile;
	int *tablica;
	tablica= new int [ile];

	start = clock();
		for (int i = 0; i < ile; i++)
		{
			tablica[i] = i;
			tablica[i] += 50;
			
		}
	stop = clock();
	czas = (double)(stop - start) / CLOCKS_PER_SEC;

	cout << "Czas zapisu bez wskaznika: "<<czas<< " sekund." << endl;
	system("pause");

	delete [] tablica;

	int *wskaznik = tablica;
	tablica = new int[ile];
	start = clock();
	for (int i = 0; i < ile; i++)
	{
		*wskaznik = i;
		*wskaznik += 50;
		wskaznik++;
	}
	stop = clock();
	czas = (double)(stop - start) / CLOCKS_PER_SEC;

	cout << "Czas zapisu z wskaznikiem: " << czas << " sekund." << endl;
	system("pause");
	delete [] tablica;


	return 0;
}


3
delete [] tablica;

int *wskaznik = tablica;
tablica = new int[ile];

Nie znam C++ i być może się mylę, ale z tego co widzę:

  • Zwalniasz pamięć którą używa tablica
  • Ustawiasz wskaźnik na stary adres tablicy, stary bo:
  • Tworzysz nową tablicę i w rezultacie przypisujesz nowy wskaźnik do tej zmiennej.
    Co oznacza że wskaźnik wskazuje na co innego niż tablica.
0

Masz racje, po zwolnieniu pamięci powinienem najpierw utworzyć tablicę a dopiero potem przypisać wskaźnik, nie wiem dlaczego tego od razu nie spostrzegłem. Dziwie się tylko że w Code Blocksie to nie przeszkadzało, dziękuje za pomoc.

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