Funkcja zwracająca wskaźnik do tablicy

0

Chce aby funkcja zwrocila mi porpawnie wskaznik do tablicy

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>

using namespace std;

void Wyswietl( int tab[] ){
	
	cout<<tab[3]<<endl; 
	
} 


int * Wczytaj (){
	
    std::fstream plik;
    plik.open( "liczby.txt", std::ios::in | std::ios::out );
    
    if( plik.good() == true )
    {

int rozmiar;
int licznik=1;

plik>>rozmiar;

    int * tablica = new int[rozmiar];
    
    tablica[0]=rozmiar;
    

		while(!plik.eof()){
			plik>>tablica[licznik++];
		}
	
		for(int i=0;i<licznik-1;i++){
			cout<<tablica[i]<<endl;
		}
      
    return tablica; 
}
  return 0;  

}



int main()
{
	int * p=Wczytaj();
	
	cout <<p[4]<<endl;
   
    return 0 ;
} 
0

Na oko zwraca. Skąd pomysł że jest inaczej?

0

Zwracasz poprawnie.

  1. Może zapomniałeś o indeksacji od zera?
  2. czy wiesz że nie odzyskasz rozmiar po powrocie z funkcji?
  3. while((plik>>tablica[licznik])&&(licznik<rozmiar)) ++licznik;
0

Naruszenie ochrony pamięci (core dumped)
Co tutaj nie gra ?
Chce po prostu zwrocic wskaznik by moc w iinych funkcjach operowac na tablicy

0

Na pewno plik tekstowy nazywa się tak jak podałeś? Jest w dobrym miejscu?

0

tak, na wyjsciu wypisaną mam jego zawartosc , wiec tutaj wszystko gra, blad wystepuje w miejscu return tablica;

0

Może pierwsza wartość w pliku wczytywana jako rozmiar jest mniejsza niż późniejsza ich ilość?
Jakie masz wartości w pliku?

1
misiek123 napisał(a):
    if( plik.good() == true )
    {

tak na marginesie nie lepiej zamiast sprawdzać tak i robić tak wielkie wcięcie dla takiej ilości kodu sprawdzić i zareagować if(plik.good() == false) .. ?

0
int * Wczytaj ()

Rozmiar?

std::array
0

@misiek123 błąd nie występuje przy zwracaniu tablicy i już. Odpal program pod debugerem i zobacz sobie jaki rozmiar czytasz z pliku. Zapewne za mały.

2

Przecież powiedziałem jak poprawić ten błąd!
Ponieważ sprawdzasz przez eof to plik z liczbami: 3 10 20 30 użyje 4 komórki tablicy.
Piętla co podałem wyżej załatwi sprawę.

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