| 

.NET C# Java Javascript Exception

2
Hi,

beim free schmiert er mir beim Debuggen immer ab und ich verstehe nicht warum ... muss compiler Fehler sein ;) joke

Ich bekomme eine Speicheradresse mit Platz für 3 Int also 12 Byte

0xae1850
0xae1854
0xae1858

diese zählt er 2 mal wieder runter

0xae1854
0xae1850

und dann probiert er ein free auf 0xae1850. Peng ... :(





/* bspl0099.c */
#include <stdlib.h>
#include <stdio.h>

#define MAX_ZAHL 2

int main() {
int *memptr;
int i;
memptr = (int *) malloc(MAX_ZAHL * sizeof(int) + 1);
if(memptr == NULL) {
printf("\nNicht genuegend Speicher!");
exit(1);
}
printf("\nSpeicher fuer %i double-Werte ok!\n",
MAX_ZAHL + 1);

for(i=0; i<=MAX_ZAHL; i++) {
*memptr=i;
if(i ==2)
continue;
memptr = memptr+1;
}
i--;

while(*memptr != 0) {
printf(" %d",*memptr);
memptr--;
}
printf(" %d",*memptr); // memptr[2] = 2 memptr[1] = 1 memptr[0] = 0
free(memptr);
printf("\nSpeicherplatz wieder freigegeben!");
return 0;
}
News:
04.05.2014
Blackstore 113 5
1 Antwort
2
Ich bekomme eine Speicheradresse mit Platz für 3 Int also 12 Byte

Ich glaube, Du bekommst nur 9 Byte:

MAX_ZAHL * sizeof(int) + 1  !=  (MAX_ZAHL + 1) * sizeof(int)

D.h. beim Zuweisen von 2 auf die 3. Speicherposition schreibst Du zum Teil in Speicher, der Dir nicht gehört. Ich bin mir nicht sicher, aber ich könnte mir vorstellen, dass dem Debugger das beim "free" auffällt und er sich deshalb beschwert.
05.05.2014
Matthias Hlawatsch 13,2k 4 9
Danke, wenigstens weiß ich das free der Punkt ist wo man nachsehen kann ob man sauber gearbeitet hat oder man Blödsinn gebaut hat.

Das einzige was mich jetzt noch vor ein Problem stellt ist das ich selbst mit view Memory noch nicht " Idiotensicher " erkenne kann ob ich innerhalb meines Speicherbereichs gearbeitet habe... gibt da eine Lösungen außer externe Software / Addons ?
Blackstore 07.05.2014

Stelle deine C-Frage jetzt!