wieder mal global variablen

Gast #901059
Lesenswert?

Hallo,

ich checks einfach nciht mehr. Ich versuche ein Struct global zu machen, 
aber meine enthaltenn Pointer änderen sich in Unterfunktionen.
Hier mal ein Auszug:
1
//send_string.h
2
typedef struct {
3
    char       *msg;
4
    int32_t  characters;
5
    char       *dataptr;
6
    } eth_msg;
7
        
8
extern eth_msg message;
9
//-----------------------------------------
10

11

12
//send_string.c
13
void test(void)
14
{
15
  rs232_puti(message.dataptr);
16
  //liefert 11128
17
}
18
....
19
//-----------------------------------------
20

21
//main.c
22
include "eth_string.h"
23
eth_msg  message;
24

25
main()
26
{ 
27
  message.dataptr = malloc(500);
28
  rs232_puti(message.dataptr);
29
  //liefert 4640
30
  test();
31
}
32
//-----------------------------------------

Ich verstehs nicht. Für mich ist die Variable global. Was mache ich da 
falsch?
#901233
Lesenswert?

Sigi__ wrote:
> Ups. War ein Tippfehler. Da kam wohl ein anderer Thread in meinem Kopf
> mit dem Tippo-Thread durcheinander. :)

Da muss wohl mal wieder ein Standardspruch her:
Es ist meist keine gute Idee, Code "einzutippen".
Bitte immer Originalcode posten, also am besten per Cut&Paste 
einfügen. Und etwas mehr Kontext wäre auch nicht schlecht, also am 
besten den kompletten Code posten.
Gast #901545
Lesenswert?

Was macht
:
rs232_puti()
:
Wenn diese Routine Zeichen über RS232 verschickt (put integer??),
dann sollte niemals nicht mehr als 500 rauskommen, oder?

Es gehört zum guten Stil, den Rückgabewert von malloc auf NULL zu 
testen. NULL wird dann von malloc zurückgegeben, wenn kein Speicher 
entsprechender Größe allokiert werden konnte.
malloc() reserviert nur Speicher, der muss danach noch initialisert 
werden.
:
  if(NULL==(message.dataptr = malloc(500)))  exit(1); // Fehler, Schluss
  memset(message.dataptr,0,500);
  rs232_puti(message.dataptr);
:
Sonst gibts amoklaufende Pointer.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren