Hallo miteinander Ich habe eine kleine frage: Wie kann ich die Grösse eines Arrays in einer Klasse bestimmen?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
Die Schlaufe wird irgendwie durchlaufen, aber nur nicht 20 mahl. Was mache ich falsch? MFG Patrick
|
Anzeige
|
C++ Array in einer Klasse -> Grösse bestimmenHallo miteinander Ich habe eine kleine frage: Wie kann ich die Grösse eines Arrays in einer Klasse bestimmen?
Die Schlaufe wird irgendwie durchlaufen, aber nur nicht 20 mahl. Was mache ich falsch? MFG Patrick
Gast
#3113392
buffer ist ein Zeiger und size[0] ist ein uint16_t. Wie groß der Zeiger ist, hängt vom verwendeten System ab. Auf einem modernen Computer sind das wahrscheinlich 32 oder 64 Bit. Die Größe eines Arrays kann man meines Wissens nicht im Programm bestimmen. Patrick B. schrieb: > Die Schlaufe wird irgendwie durchlaufen, aber nur nicht 20 mahl. > Was mache ich falsch? Du zeigst nicht den restlichen bzw. deinen richtigen Code. Im Geposteten ist in dieser Richtung erst mal nichts falsch. Dussel schrieb: > buffer ist ein Zeiger und size[0] ist ein uint16_t. Wie groß der Zeiger > ist, hängt vom verwendeten System ab. Auf einem modernen Computer sind > das wahrscheinlich 32 oder 64 Bit. Die Größe eines Arrays kann man > meines Wissens nicht im Programm bestimmen. ziemlicher Unsinn, den du da verbreitest. Na klar geht das:
Size of array buffer[]: 127
Gast
#3113421
Karl Heinz Buchegger schrieb: > ziemlicher Unsinn, den du da verbreitest. Ja? Ok, dann tut es mir leid. Dussel schrieb: > Karl Heinz Buchegger schrieb: >> ziemlicher Unsinn, den du da verbreitest. > Ja? Ja, leider. Das fängt schon mal damit an, dass an dieser Stelle überhaupt kein Pointer involviert ist. Wenn er das Array an eine andere Funktion als Parameter 'übergeben' hätte, dann hättest du recht. Aber das hat er nicht - zumindest nicht in der geposteten Codeskizze. Allerdings kennen wir ja unsere Pappenheimer - das heißt ja noch lange nicht, dass er es in seinem richtigen Code nicht genau so macht. Daher: der echte Code muss her. Ok, im Anhang ist noch der Code: Hierbei habe ich die unnötigen Funktionen gelöscht. Es geht nur um die Funktion "u8HandleWriteMultipleRegisters" mit der 2. if-Abfrage. Es wird nur geprüft ob "p__u16StartAdr" nicht ausserhalb des Array-Bereichs liegt. Oh mann... Fehler gefunden. > private: > sf_uint16 m_au16HoldingRegisters[1]; /// <- sollte 10 sein Besten Dank für die hilfe (ich war mir einen Moment lang nicht mehr sicher, wie man mit sizeof umgehen muss).
Gast
#3113556
Karl Heinz Buchegger schrieb: > Das fängt schon mal damit an, dass an dieser Stelle überhaupt kein > Pointer involviert ist. Ja gut. Zu Rettung meiner Ehre muss ich aber trotzdem sagen, dass Zeiger und Arrays sehr verwandt sind. Ich bin immer davon ausgegangen, dass die intern gleich behandelt werden. Was ich aber nicht wusste, ist, dass man mit sizeof tatsächlich die Größe eines Arrays bestimmen kann.
Welchen Sinn hat ein Array, das genau ein Element enthält? Das ist am Anfang nur als Platzhalter gedacht gewesen. Das Array soll beim instanzieren der Klasse definiert werden. Patrick B. schrieb: > Das Array soll beim instanzieren der Klasse definiert werden. Die Definition des Arrays ist Teil der Definition der Klasse. Beim Instanziieren kann man nichts definieren. > Es geht nur um die > Funktion "u8HandleWriteMultipleRegisters" mit der 2. if-Abfrage. > Es wird nur geprüft ob "p__u16StartAdr" nicht ausserhalb des > Array-Bereichs liegt. Alles schön und gut, aber hier > sf_uint8 CModbus::u8HandleWriteMultipleRegisters (sf_uint16 p__u16StartAdr, sf_uint16 p__u16Num, sf_uint8 p__u8ByteCnt, sf_uint8 p_au8Data[]) { ... > for (u16WordCnt = 0; u16WordCnt < p__u16Num; u16WordCnt++, i += 2)/// Save new values vermisse ich den Test ob p__u16Num im zulässigen Bereich ist. Wenn nicht, dann bügelst du dir den Speicher nieder. Und bei einer Array-Länge von 1, ist das nicht sehr unwahrscheinlich. Da sollte auf jeden Fall noch ein Test mit rein! Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|