# Dynamische Felder in C



## Radhad (23. Mai 2003)

Hallo Leute!

Habe ein Problem mit einer Aufgabe die ich lösen muss für die Schule..
Es geht um die Berechnung des Querparitätsbits wo die Ausgabe eine Dualzahl sein soll. Eigentlich kein Problem, nur sollen wir es mit statischen Feldern lösen, aber ich würde gerne die größe des Feldes je nach größe der Dualzahl anpassen. Daher müsste man wohl *wie ich annehme* dynamische Felder benutzen..

Hier erstmal der Code:

```
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>


void querbit(int dezimalzahl)
{
	int quersumme=0, rest=0, i=0, dezimalrechnen=0;
	
	dezimalrechnen=dezimalzahl;

	for(dezimalrechnen;dezimalzahl>=0;i=i+1)
	{
		dezimalrechnen=dezimalrechnen/2;
	}

	int dualzahl[i];

	do
	{
		dezimalzahl=dezimalzahl/2;
		dualzahl[i]=dezimalzahl;
		i=i+1;
	}
	while(dezimalzahl!=0);

	printf("Die Dualzahl lautet: ");
	for(i;i>=0;i=i-1)
	{
		printf("%d",dualzahl[i]);
	}
}



void main()
{
	int dezimaleingabe=0;
	char nochmal='n', auswahl=0;
	
	printf("Querparitaetsbitberechnung");
	Sleep(4000);
	system("cls");

	do
	{
		printf("Bitte geben Sie die positive Dezimalzahl ein: ");
		scanf("%d",&dezimaleingabe);
		fflush(stdin);
		system("cls");

		querbit(dezimaleingabe);
	}
	while(nochmal=='j' || nochmal=='J');
}
```

Ist der komplette Code *vorsichtshalber*.. An der Stelle wo ich das Feld deklariere kommen die Fehler.. Wär echt gut wenn mir jemand erklärt mit Beispiel wie ich daraus ein dynamisches Feld machen kann um das zu erreichen was ich oben beschrieben habe.

PS: Benutze Visual C++ 6.0 wie in der Schule ...


----------



## Tobiasm (24. Mai 2003)

Unter C++ gibt es keine variablen Arrays sondern nur sollche, Deren Größe zur Compilezeit schon fest steht. Das heißt, Du muss wohl oder übel folgendes machen:


```
int *dualzahl;
dualzahl = new int [i];
```

Sonst bleibt alles gleich.

MfG

Tobias


----------



## Radhad (24. Mai 2003)

danke  ich probier das gleich mal aus


----------



## Patrick Kamin (25. Mai 2003)

*-*



> Deren Größe zur Compilezeit schon fest steht.


Du kannst dir doch zur Laufzeit soviel Speicher auf dem Heap reservieren, wie er hergibt. Das was du meinst, bezieht sich auf den Stack.


----------



## Tobiasm (25. Mai 2003)

*Re: -*



> _Original geschrieben von Caminus _
> *Du kannst dir doch zur Laufzeit soviel Speicher auf dem Heap reservieren, wie er hergibt. Das was du meinst, bezieht sich auf den Stack. *



Arrays liegen aber immer auf dem Stack. Dasher muss der Speicher immer vom Heap geholt werden (wie ich gezeigt habe).

MfG

Tobias


----------



## Patrick Kamin (25. Mai 2003)

*-*

Mit 
	
	
	



```
Int * Pointer = new int[500];
```
Erstellst du dir einen Integer Pointer - liegt auf dem Stack - welcher auf ein Integer-Array auf dem Heap zeigt.


----------



## Radhad (25. Mai 2003)

das programm hängt sich immer bei der rechnung auf..


```
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>

void querbit(int dezimalzahl)
{
	int rest=0, i=0;
	int *dualzahl;
	dualzahl = new int [i];
	
	for(dezimalzahl;dezimalzahl!=0;i++)
	{
		rest=dezimalzahl/2;
		dualzahl[i]=rest;
	}
	
	for(i;i>=0;i=i-1)
	{
		printf("%d",dualzahl[i]);
	}
	
}



void main()
{
	int dezimaleingabe=0;
	char nochmal='n', auswahl=0;
	
	printf("Querparitaetsbitberechnung");
	Sleep(3000);
	system("cls");

	do
	{
		printf("Bitte geben Sie die positive Dezimalzahl ein: ");
		scanf("%d",&dezimaleingabe);
		fflush(stdin);
		system("cls");

		querbit(dezimaleingabe);
	}
	while(nochmal=='j' || nochmal=='J');
}
```


----------



## Radhad (25. Mai 2003)

hab das problem selber gelöst *g*


```
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

void querbit(int dezimalzahl)
{
	int quersumme=0, rest=0, i=0;
	int dual[100]={0};

	do
	{
		rest=dezimalzahl%2;
		dezimalzahl=dezimalzahl/2;
		
		if(rest==0)
		{
			dual[i]=rest;
		}
		else
		{
			rest=1;
			dual[i]=rest;
		}
		i=i+1;
	}
	while(dezimalzahl!=0);
	
	printf("Die Dualzahl lautet ");
	
	for(i;i>=0;i=i-1)
	{
		printf("%d",dual[i]);
	}
	printf("\n\nWeiter ");
	getch();
	fflush(stdin);
	system("cls");
}



void main()
{
	int dezimal=0;
	char nochmal, auswahl=0, bit=0;
	
	printf("Querparitaetsbitberechnung");
	printf("\nWeiter ");
	getch();
	fflush(stdin);
	system("cls");

	do
	{
		printf("Bitte geben Sie die Dezimalzahl ein: ");
		scanf("%d",&dezimal);
		fflush(stdin);
		system("cls");

		querbit(dezimal);

	
	printf("Wollen Sie eine weitere Schaltung berechnen?\n");
	printf("[J] / [N]: ");
	scanf("%c",&nochmal);
	fflush(stdin);
	system("cls");
	}
	while(nochmal=='j' || nochmal=='J');
}
```

nochmals danke an alle! bin auf den Fehler selber noch gekommen 
und zwar war

```
int dual[100]={0};
```
das problem!


----------

