taschenrechner erweitern

Du kannst in der Tat malloc durch new ersetzen. Das geht z.B. so:
Code:
int *p = new int ;
int *m = (int*)malloc( sizeof( int ) ) ;
Diese beiden Anweisungen sind äquivalent. Wie du siehst, ist die new-Syntax erstens weitaus einfacher und zweitens weit weniger fehleranfällig als die malloc-Syntax.

Gawayn
 
Hallo Gawayn,
danke für den Hinweis ! das hat mir echt weitergeholfen denn jetzt versteh ich wenigstens was an der Stelle des programms gemacht wird. ich habe jetzt malloc durch new und free durch delete ersetzt.
Aber was ist jetzt noch mit dem realloc. Was ist hier der gegenpart in C++.
Ich würde das auch gerne entsprechend ersetzen wenn möglich. Ich habe auch noch keinen genauen plan was realloc macht und eine leicht zu verstehende doku dazu habe ich auch nicht gefunden. Hier nochmal zur Übersicht der quellcode.

Code:
char Textzeile[10];

int rechne (char *param)
{
	int erg;
	int i;
	int k=0;
	char szHilf[5];
   char* operanten;
	int operantenAnz=0;
	int *werte;
	int werteAnz=0;
	
	//operanten=(char *) malloc (sizeof(char));
	operanten= new char;  // new ersetzt malloc

	//werte = (int *) malloc (sizeof(int));
	werte = new int;   // new ersetzt malloc

	//String zerlegen
	for(i=0; i<strlen(param); i++)
	{
		if (param[i] >=48 && param[i] <=57)
		{
			//es ist eine Zahl
			szHilf[k]=param[i];
			k++;
			
			if (param[i+1] < 48 || param[i+1] > 57)
			{
			//Zahl ist fertig
				szHilf[k] = '\0';
				k=0;
				werte = (int *) realloc (werte, (werteAnz+1)*sizeof(int));
				sscanf(szHilf, "%d", &werte[werteAnz]);
				werteAnz++;
			}
		}
		else if (param[i] == '+' || param[i] == '-' || param[i] == '*' || param[i] == '/')
		{
		//Operation gefunden
			operanten = (char *) realloc(operanten, (operantenAnz+1)*sizeof(char));
			operanten[operantenAnz]=param[i];
			operantenAnz++;
		}
	}
	
	//Ausrechnen
	
	erg=werte[0];
	for(i=1;i<werteAnz;i++)
	{
		switch(operanten[i-1])
		{
		case '+':
				erg= erg + werte[i];
				break;
		case '-':
				erg= erg - werte[i];
				break;
		case '*':
				erg= erg * werte[i];
				break;
		case '/':
				erg= erg / werte[i];
				break;		
		}
	}
	//free (werte);
	delete (werte);      //delete ersetzt free
	//free (operanten);
	delete (operanten);  //delete ersetzt free
	
	return erg;
}

int main()
{
cout<<"Eingabe: ";
cin>>Textzeile;
cout<<endl<<"Das Ergebnis lautet: "<<  rechne(Textzeile);
}

Durch was kann ich realloc ersetzen ?
 
Wer nicht Objektorientiert programmiert sollte auch eigentlich besser C als C++ verwenden (das ist zumindest meine bescheidene Meinung).
 
@squeaker: Das macht keinen Sinn. Warum soll jemand eine Syntax benutzen, die fehleranfällig ist, wenn C++ ja absichtlich eine bessere Syntax eingeführt hat, um genau diese Fehleranfälligkeit zu vermeiden. Und außerdem ist ein prozedural programmiertes Programm immer noch ein wunderschönes C++-Programm. Schließlich ist C++ keine objektorientierte Sprache (wie Java), sondern nur eine Sprache mit objektorientierten Fähigkeiten.

@michelr: realloc ändert die Größe eines vorher mit malloc reservierten Speicherbereichs. Wenn man also mit malloc z.B. 1024 Bytes reserviert hat und später auf einmal 2048 Bytes braucht, dann muss man nicht mit malloc einen neuen Bereich reservieren, dort alles hineinkopieren und dann mit free den alten Bereich freigeben, sondern man kann mit realloc einfach den alten Bereich vergrößern. Allerdings kenne ich aus dem Stehgreif keinen C++-Operator, der diese Funktion wahrnimmt.

Gawayn
 
Da bin ich anderer Meinung. Aber ich kenne mich mit den Unterschieden zwischen C und C++ Syntax zu wenig aus um qualifiziert zu sein. Aber so simpel kann die C++ Syntax nicht sein wenn es noch keine Compiler gibt der sie vollständig implementiert.
 
Zurück