PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Arraygrößen



Camel69
09-12-2002, 17:01
gibts nen einfachen Grund, warum mein Programm ne Speicherverletzung zurückgibt, wenn ich ein dyn. array mit z.b. 1000, also vielen, Elementen (jedes element 1 Byte groß [unsigned char]) erstelle?
Habe nämich mein eigenes Grafikformat geschrieben und der konverter (bmp -> meinformat) muss ja die sachen zwischenspeichern (wegen kodierung usw.)...und wenn ich da ein bild mit mehreren hundert pixeln mache, stürzt er ab...

tkortkamp
09-12-2002, 17:09
Ohne Code wirds schwierig genau was zu deinem Problem zu sagen...

Ich vermute mal du reservierst nicht genügend Speicher für deinen Buffer.

c ya,
Tobias

Camel69
10-12-2002, 19:25
gut, ist ziemlich viel an code und ich will den auch nciht unbedingt public machen, aber wenn es mit z.b. 200 elementen geht, müsste es doch mit 1000 oder mehr doch auch gehen, oder? sonst wäre es ja nicht möglich, größe bilder z.b. bei nem spiel in ein array zu lesen...?

tkortkamp
10-12-2002, 20:10
Original geschrieben von Camel69
gut, ist ziemlich viel an code und ich will den auch nciht unbedingt public machen, aber wenn es mit z.b. 200 elementen geht, müsste es doch mit 1000 oder mehr doch auch gehen, oder? sonst wäre es ja nicht möglich, größe bilder z.b. bei nem spiel in ein array zu lesen...?
Solange du genügend Speicher für das Bild reservierst sollte das gehen.
In deinem Fall geht das dann ja so in C++:

unsigned char *buffer = new unsigned char[1000];
Nur denke daran, dass du auf das erste Element vom Array mit buffer[0] zugreifst und auf das letzte mit buffer[999].

Tja mehr fällt mir jetzt so nicht mehr ein...

c ya,
Tobias

tkortkamp
10-12-2002, 20:12
Weils gerade zum Thema passt: http://www-106.ibm.com/developerworks/security/library/overflows/?dwzone=security

rosenstolz
12-12-2002, 19:50
hier vielleicht hilft dir das ja, ich hatte nen logischen fehler

hier werden immer 100*sizeof(int) Byte dazu geholte wenn der rest voll ist;

wobei PAKTE=100 ist kann sich aber auch ändern;

int testzahl=0;
int testzahl_alt=0;
short status=0;
int wechsel=0;
int count;
int ctr1=0;
int ctr2=PAKET;
int anzahl=0;
int max;
int ende;
int *buffer=malloc(PAKET * sizeof(int));
//************************************************** ************************

printf("\nmaximal Wert: ");
scanf("%d", &max);

//**************************

if(max>=2147483646 || max<0)
{
printf("Der maximal Wert liegt auÞerhalb des Wertebereich.\n");
exit(-1);
}

//**************************

for(count=0;count<max;count++)
{
testzahl=neue_test(count, testzahl_alt, &wechsel);
status=test(testzahl);

if(status==1)
{
buffer[ctr1]=testzahl;
ctr1++;
anzahl++;
}
if(ctr1==ctr2)
{
ctr2+=PAKET;
buffer=realloc(buffer,ctr2 * sizeof(int));
}

testzahl_alt=testzahl;
if(count>5)
count=testzahl;
}
ende = ctr1;
for(ctr1=0;ctr1<ende;ctr1++)
{
printf("zahl %d:%d \n", buffer[ctr1], ctr1);
}


gruß martin