Xcode Fehler (malloc) mit Compiler

Nils31

Nils31

Mitglied
Thread Starter
Dabei seit
30.10.2007
Beiträge
94
Reaktionspunkte
1
Hallo Macuser,
Ich hab folgendes Problem. Ich programmiere, ganz gleich was auch immer. Wenn ich beispielsweise etwas mit einem String a deklarieren will sagt er diesen Fehler.

Aufgabe 35(1104) malloc: *** error for object 0x100004200: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

Das Problem konnte ich sogar schon umgehen indem ich ihm einen "Nullpointer" genannt habe also einen der nirgens existiert.
schaut dann folgendermaßen aus

int main(){

int i=0;

string a = " ";

//ich kenn es ja eher so

string a;

//und dann funktioniert auch alles komischerweise aber warum und wie bekomm ich es weg oder wieso gibts diesen "?bug?"....
danke schonmal im vorraus fürs helfen
gruß nils
 
//und dann funktioniert auch alles komischerweise aber warum und wie bekomm ich es weg oder wieso gibts diesen "?bug?"....
Keine Ahnung, woher soll das anhand deiner fast nicht existenten Problembeschreibung irgendwer wissen? Hast du dir deinen Beitrag eigentlich mal durchgelesen, nachdem du ihn geschrieben hast? Ich habe nämlich den Eindruck, dass du das nicht getan hast.

Und wenn du nicht weißt wie du dein Problem am besten beschreiben sollst, dann poste wenigstens ein Minimalbeispiel, welches dein Problem reproduziert.
 
vor allem soll das C oder ObjC sein?
 
Ja, häng mal bitte ein Projekt (ohne Build Ordner) oder ein compilierbares Beispiel an.

Was passiert ist, dass ein pointer freigegeben wird, der schon einmal freigegeben wurde (oder noch nie angelegt wurde)

Alex
 
Also nochmal von vorne
ich programmiere folgendes in C++ um Großbuchstaben in kleine umzuwandeln
/*
* __________.h
*
*
* Created by Nils Graeff
* Copyright 2009 __MyCompanyName__. All rights reserved.
*
/* Import ***********************************************************************************/
#include <iostream> /* cin, cout,... */
#include <string> /* string class */
// #include <cmath> /* sin(), cos(), fabs() ...*/

/* General Definitions ***********************************************************************/
using namespace std;
/* Module Global Definitions (Constants / Variables / Macros / Types ************************/

/* Module Private Function Declarations *****************************************************/

/* Public Function **************************************************************************/
int main(){

int i, b;
char *p;
string a = " "; //eigentlich steht hier doch NUR string a;
i = 0;
cout << "Geben sie eine Buchstabenfolge an: " << endl;
cin >> a;

b = a.size();
while (b < i) {
i++;
if (*p >= 0x41 && *p <= 0X5A) {
*p = *p + 32;
a = *p;

}
}
cout << "Der String wurde folgendermaßen umgewandelt: " << endl;
cout << a;



/* Function local Constants / Variables *************************************************/

/* Main function ************************************************************************/


system("PAUSE");
return 0; /* No Error: EXIT_SUCCES */

}
/* Module Private Function Definitions ******************************************************/

Der Compiler macht dann

Loading program into debugger…
Program loaded.
run
[Switching to process 520]
Running…
Geben sie eine Buchstabenfolge an:
TEst
Der String wurde folgendermaßen umgewandelt:
sh: PAUSE: command not found
TEst
Debugger stopped.
Program exited with status value:0.

Abgesehen davon dass er bei mir die Buchstaben noch nicht umwandelt funktioniert es.

so und der Compiler sagt wenn ich NUR string a; schreibe folgendes

Loading program into debugger…
Program loaded.
run
[Switching to process 420]
Running…
Geben sie eine Buchstabenfolge an:
TEst
Aufgabe 35(420) malloc: *** error for object 0x100005220: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Program received signal: “SIGABRT”.
sharedlibrary apply-load-rules all
(gdb)

hoffe es ist jetz ausführlich genug
 
Zuletzt bearbeitet:
dir ist schon klar, dass string eine klasse ist und kein primitiver datentyp?
 
ja, aber ich so funktioniert mein compiler:rolleyes:
 
Hä??? Dein Compiler funktioniert völlig richtig.

Dein Fehler ist wohl

while (b < i)

Wenn b < 0 ist, hast Du eine Endlosschleife, und irgendwann ist Dein Speicher voll.

EDIT: Oder so. Ganz klar ist mir nicht, was passiert. Aber dort würde ich suchen.
 
Zuletzt bearbeitet:
Ach, noch was. Dein Zeiger p wird überhaupt nicht initialisiert.
 
ja mit dem string is so eine sache, dass es so geschrieben wird wie wikibooks sagt, weiß ich
warum funktioniert aber dieses programm bei mir in der uni auf einem win rechner ohne mucken?
 
hä warum wird der ned initialisiert
 
Nirgends schreibst Du p = ...

EDIT: Sag mal, bist Du eigentlich sicher, daß Du das Programm gepostet hast, was Du auszuführen versuchst, und nicht nur ungefähr das Programm????

Und bist Du sicher, daß *genau dieses* Programm unter Win gelaufen ist?
 
ja ganz sicher, ich habs einfach kopiert von der uni auf meinen stick und dann in xcode eingefügt und geschaut ob alles am rechten ort ist :) deswegen wundert mich es ja so
 
womit compilierst du den unter win und in der uni?
schon unterschiedliche gcc version sind anders, verzeihen dir fehler mehr oder weniger ;)

und merk dir mal:
wenn der code compiliert, sagt das noch nichts über die richtigkeit aus ;)
 
stimmt den es kann ja ein syntax fehlern sein :)
in der uni arbeiten wir mit dev++ wie der compiler jetzt selber heißt weiß ich nicht
 
Na ja, Du kennst ja jetzt mindestens zwei Fehler:

1.) While-Schleife, die entweder nie ausgeführt wird oder eine Endlosschleife ist, je nach Initialwert von i und b .

2.) Uninitialisierter Zeiger p, auf den, sogar schreibend, zugegriffen wird.

Mach doch mal die beiden Fehler raus und schau dann, ob der malloc-Fehler noch immer auftaucht.
 
der malloc fehler is da solange ich mit strings arbeite
sobald ich den string rauslösche, geht jedes programm... (natürlich nur wenn das programm ohne strings läuft)
 
ich werde jetzt mal das ändern und nochmal schreiben
 
also der malloc fehler wird weiterhin angezeigt egal ob intialisieren oder nicht. und die whileschleife wird ja deswegen irgendwann aufhören, weil mein compiler eine eingabe erwartet, ohne die läuft das programm ja nicht durch...

ich hab es jetzt noch als for schleife

for(i=0;i<b;i++){
std::cout << 'h';
p = &a;
if (*p >= 0x41 && *p <=0x5A){
*p = (*p + 32);
a = *p;
}
}
 
Zurück
Oben Unten