Du versuchst hier einem Array einen neuen Wert zuzuweisen, das geht in C
so nicht. Man kann nur einzelnen Elementen einen neuen Wert zuweisen -
für das ganze Array bräuchte es also eine Schleife.
Ich würde hier allerdings überlegen ob man nicht mit Pointern arbeiten
möchte.
Hinweis: Einige C-Compiler betrachten Dateien mit Endung .C (anstatt .c)
als C++ Source Code - diese Sprache hat aber signifikante Unterschiede
zu C.
Jup, das funktioniert
Jim M. schrieb:> Ich würde hier allerdings überlegen ob man nicht mit Pointern arbeiten> möchte.
Ja, das möchte ich später auch machen, zumal es nicht immer die selbe
Größe ist.
Jim M. schrieb:> Hinweis: Einige C-Compiler betrachten Dateien mit Endung .C (anstatt .c)> als C++ Source Code - diese Sprache hat aber signifikante Unterschiede> zu C.
Das ist ein Rechtschreibefehler hier. Die Datei ist .c . Dennoch ein
guter Hinweis. Danke :)
Du könntest "memset(graphicData_s.data_au8, 0,
sizeof(uint8_t[graphicData_s.rows_u32][graphicData_s.cols_u32]));"
verwenden.
Wenn es sowieso Variabel werden soll, würde ich da erst mal aus dem
data_au8 einen Pointer machen.
Unten noch ein Beispiel mit VMTs, die sind bei sowas echt praktisch.
(Werden aber vom MSVC nicht unterstützt, aber wer nutzt das schon).
1
#include<stdint.h>
2
#include<stdlib.h>
3
#include<string.h>
4
5
#define graphic_data_vmt(S,N) \
6
typedef uint8_t N##_row_t[(S).rows_u32]; \
7
typedef N##_row_t N##_t[(S).cols_u32]; \
8
9
typedefstruct{
10
uint32_trows_u32;
11
uint32_tcols_u32;
12
void*data_au8;
13
}graphicData_ts;
14
15
// Objekte mit static storage duration, also alle globalen, werden per default mit 0 initialisiert
16
// Man kann auch einzelnen Member per designated initializer initialisieren, alle anderen werden dann immer mit 0 initialisiert
17
staticgraphicData_tsgraphicData_s;
18
19
voidgraphicInit_v(void){
20
graphicData_s.cols_u32=60;
21
graphicData_s.rows_u32=60;
22
23
{// Scope des VMT einschränken. Nachträgliche Änderungen an graphicData_s.cols_u32 / graphicData_s.rows_u32 werden nicht im Typ übernommen.
24
graphic_data_vmt(graphicData_s,gd_data);// Definiert VMT Typen, support ist in einigen C Versionsstandards optional!
Chandler B. schrieb:> compiler fehler setzen daten 2d-array
Erst mal die Schuld auf den Compiler schieben, der ist fehlerhaft.
"einen Fehler in meiner Programmierung kann ich ausschliessen"
Wastl schrieb:> Chandler B. schrieb:>> compiler fehler setzen daten 2d-array>> Erst mal die Schuld auf den Compiler schieben, der ist fehlerhaft.
Ich habe das interpretiert als "der Compiler meldet einen Fehler", nicht
als "der Compiler hat einen Fehler".
Anton schrieb:> Wozu überhaupt initialisieren?
Ja, die explizite 0-Initialisierung ist nicht nötig, schadet aber auch
nicht. Die ist hier aber auch gar nicht das Problem.