Zum Inhalt springen

Speicherzugriffsfehler bei dynamischen Array


default user

Empfohlene Beiträge

Hallo,

Ich benötige für ein Tabellenprogramm mehrere QTableWidgetItems in einem 2-Dimensionalen Array, wobei die erste Dimension nicht festgelegt ist. Ich habe dazu in der Header-Datei folgendes deklariert:

QTableWidgetItem *items[][5];
Später werden die benötigten items in zwei for-Schleifen erzeugt und dem TableWidget zugeordnet:
items[i1][i2] = new QTableWidgetItem;

TableWidget1->setItem( i2, i1, items[i1][i2] );
Leider erhalte ich dabei immer einen Speicherzugriffsfehler beim Starten unter Linux. Wenn ich in der Header-Datei die größe des Arrays festlege, funktioniert es, nur ist das natürlich nicht Sinn der Sache. Hier der Quellcode, das Relevante spielt sich in MainWindow.cpp und MainWindow.h ab. main.cpp MainWindow.h MainWindow.cpp FindDialog.h FindDialog.cpp Wahrscheinlich gibt es ein Problem mit dieser Funktion:
void MainWindow::createTable(){


	int i1, i2;


	twidget1 = new QTableWidget( 5, 5, this );


	QStringList horizontal;

	horizontal << "A" << "B" << "C" << "D" << "E";


	twidget1->setHorizontalHeaderLabels( horizontal );

	twidget1->setSortingEnabled( TRUE );



	for( i1=0; i1<=4; i1++ ){

		for( i2=0; i2<=4; i2++ ){


			items[i1][i2] = new QTableWidgetItem;

			items[i1][i2]->setText( "foo" );

			twidget1->setItem( i2, i1, items[i1][i2] );

		}

	}


	this->setCentralWidget( twidget1 );


}

Danke im Voraus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

QTableWidgetItem *items[][5];
Laut Standard ist das ein unvollständiger Typ. Viele Compiler bieten allerdings eine Erweiterung, die diese Deklaration als Array der Größe 0 interpretieren, wenn es Member eine Klasse oder Struktur ist. Das sollte aber eigentlich nur dann funktionieren, wenn dieses Array der letzte Member ist.

Wie auch immer, diese Deklaration bedeutet nicht, dass du hier ein dynamisches Array hast, das sich bei Bedarf selbst anlegt oder gar automatisch vergrößert.

Das musst du entweder von Hand machen, oder einen geeigneten Container benutzen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Achso, ich hatte das von den Funktionsparametern übernommen, dort kann man einfach etwas wie array[][5] als Parameter nehmen. Da es der Compiler akzeptierte, ging ich davon aus, das könnte man als Member so wie beim Parameter nutzen.

Danke, ich habs umgeschrieben und jetzt geht's: (Als Beispiels ein 5x5-Array)

/* MainWindow.h */

QTableWidgetItem ***items;


/* MainWindow.cpp */

items = new QTableWidgetItem**[5];

for( i1=0; i1<=4; i1++ ){

    items[i1] = new QTableWidgetItem*[5];	

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...