Zugriff auf 1-D int vector array



  • Hallo,
    warum kann ich in OnShow und OnTimer nicht auf das vector array zugreifen und bekomme access violation. Auf int Test funktioniert der Zugriff. Habe ich da in der Deklaration *.h etwas falsch gemacht ?

    *.cpp

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #include <vector>
    #include <iostream>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
     AnzahlBilder = 100;
     std::vector<int> idxBildArray( AnzahlBilder, -1 );
    
     Test = 99;
    
     ShowMessage( "Constructor BA size = " + IntToStr( (int)idxBildArray.size() ) );
     ShowMessage( "Constructor Test = " + IntToStr( Test ) );
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormShow(TObject *Sender)
    {
    	int bld = 0;
    
    	ShowMessage( "FormShow BA size = " + IntToStr( (int)idxBildArray.size() ) );
    	ShowMessage( "FormShow Test = " + IntToStr( Test ) );
    
    	for ( int i = 0; i < AnzahlBilder; i++ )
    	{
    	 if ( idxBildArray[i] != -1 )
    		bld++;
    	}
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    	int bld = 0;
    
    	ShowMessage( "Timer BA size = " + IntToStr( (int)idxBildArray.size() ) );
    	ShowMessage( "Timer Test = " + IntToStr( Test ) );
    
    	for ( int i = 0; i < AnzahlBilder; i++ )
    	{
    	 if ( idxBildArray[i] != -1 )
    		bld++;
    	}
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
     Timer1->Enabled = true;
    }
    //---------------------------------------------------------------------------
    

    *.h

    //---------------------------------------------------------------------------
    
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <System.Classes.hpp>
    #include <Vcl.Controls.hpp>
    #include <Vcl.StdCtrls.hpp>
    #include <Vcl.Forms.hpp>
    #include <Vcl.ExtCtrls.hpp>
    #include <vector>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
    	TTimer *Timer1;
    	TMemo *Memo1;
    	TButton *Button1;
    	TButton *Button2;
    	void __fastcall FormShow(TObject *Sender);
    	void __fastcall Timer1Timer(TObject *Sender);
    	void __fastcall Button2Click(TObject *Sender);
    
    private:	// Benutzer-Deklarationen
    	std::vector<int> idxBildArray;
    	int AnzahlBilder;
    	int Test;
    
    public:		// Benutzer-Deklarationen
    	__fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    


  • @Ronco sagte in Zugriff auf 1-D int vector array:

    AnzahlBilder = 100;
    std::vector<int> idxBildArray( AnzahlBilder, -1 );

    Das erstellt die einen NEUEN vector idxBildArray INNERHALB der Funktion Form1. Dieser hat NICHTS mit dem idxBildArray der Form zu tun.

    Du hast ja auch nicht int AnzahlBilder = 100 geschrieben, sondern das korrekt ohne das int gemacht, damit eben keine neue Variable erzeugt wird. Weise einfach zu: idxBildArray = std::vector<int>(AnzahlBilder, -1).



  • @wob : Ah, ok, vielen Dank für die schnelle Hilfe.


Log in to reply