Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » malloc fuer doofe...

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
29.03.2004, 21:36 Uhr
~klaus loering
Gast


Hallo...

Ich habe folgendes Problem:

Ich will/soll/werde/muss ein C programm erstellen welches im wesentlichen eigentlich nur bubblesort bewerkstelligen soll...

Allerdings gibts da ein paar Dinge mit denen ich mich sehr schwer tue...

Das Programm muss mit verschiedenen Dateitypen (int,double etc.) arbeiten können...allerdings soll der ent. Speicher für die zu sortierende Liste per malloc beschafft werden...

Genau hier will es nicht klappen :(...entweder hasst mich malloc,mein compler,ANSI C oder ich steh wirklich boese aufm schlauch...

Vielleicht wäre jmd so nett mir ein Beispiel zu posten,wie ich bei einem string per malloc speicher fuer ent. Dateitypen allokiere...

Ich hab auch im OpenBook nachgsehen und K+R gewaelzt...aber irgendwie hat mich das alles nicht weitergebracht :-/

Ich poste mal als Anhang meinen bisherigen Code...allerdings
kann der nur als Orientierung dienen da ich den mittlerweile derart oft umgeschrieben,geloescht etc. habe, das ich ihn eh von grund auf neu schreiben muss (am schluss hab ich schon fast zufallsmaessig an malloc rumprobiert...)



C++:
#include <stdlib.h>
#include <stdio.h>



main()
{
int *liste;        /* Zeiger auf 1. Element im Datenvektor */
int n,l;            /* Anzahl und Länge der Datenobjekte */
extern int vgl();  /* Vergleichsfunktion */
int choice;
int counter;

/**** Datenerfassung****/
eingabe(&liste, &n, &l,&choice);

/****Sortierung****/
//if(n > 1)
//qsort(liste,n,l,vgl);

/****Ausgabe****/
ausgabe(liste, n,l,choice);
}

eingabe(int *liste,int n,int l,int choice)
{
choice=0;

puts("Bitte einen ent. Dateityp auswaehlen\n");
puts("1 für Int,2 für double\n\n");
scanf("%d",&choice);
puts("\n\n");

switch(choice)
    {
        case 1:
            *liste=(int *)malloc(10*sizeof(int));
            liste[0]='5';
            liste[1]='6';
            liste[2]='7';
            liste[3]='8';
            liste[4]='9';
            liste[5]='10';
            liste[6]='1';
            liste[7]='2';
            liste[8]='3';
            liste[9]='4';
            puts("Liste wird automatisch mit 10 Int Werten gefuellt");
            break;
            
        case 2:
            *liste=(int *)malloc(10*sizeof(double));
            liste[0]='5';
            liste[1]='6';
            liste[2]='7';
            liste[3]='8';
            liste[4]='9';
            liste[5]='10';
            liste[6]='1';
            liste[7]='2';
            liste[8]='3';
            liste[9]='4';
            puts("Liste wird automatisch mit 10 double Werten gefuellt");
            break;
            

        default: puts("Falsche Eingabe! Programm wird beendet");
//                exit();
                    

    }
    
}

ausgabe(int *liste,int n,int l,int choice,int counter)
{
    puts("Ausgabe der Liste\n\n");

    switch(choice)
        {
        case 1:
                puts("Ausgabe der sortierten int Werte\n");
                break;

        case 2:
                    puts("Ausgabe der sortierten double Werte\n");
                    break;
        }
counter=0;
    for(counter;counter<=9;counter++)
    {
        printf("%c\n",&liste[counter]);
    }
}






Danke schonmal...


yours
ara
edit mike: cpp Tags -> [ cpp ] [ /cpp ]

Dieser Post wurde am 30.03.2004 um 09:38 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.03.2004, 21:43 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


wenn ichs auf den ersten blick richtig sehe liegt zumindest einer deiner fehler hier

C++:
*liste=(int *)malloc(10*sizeof(int));



list ist doch ein intzeiger...
deshalb nicht dereferenzieren weil malloc liefert dir ja nen pointer...

also so

C++:
liste=(int*)malloc(10*sizeof(int));



man ist ja ne kranke aufgabe das in c zu machen wo es doch in c++ templates gibt damit man sowas typenunabhängig implementieren kann...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.03.2004, 21:49 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Also, wie du das mit deiner integer Liste machst, das sieht doch schonmal fast gut aus. Du darfst nur kein Sternchen vor liste schreiben, da du ja den Wert in Liste ändern willst und nicht das worauf liste zeigt.
Du musst es also so schreiben:

C++:
liste = (int*) malloc(10*sizeof(int));



Bei deiner double liste sieht das allerdings anders aus. Es wird zwar der entsprechende Speicherplatz (10*sizeof(double)) reserviert, da du liste aber als integer angelegt hast, wirst du hier bei Wertern die größer als der integer Bereich sind probleme bekommen.

Ist die Zuweisung der Werte als character beabsichtigt oder willst du wirklich diese Zahlen zuweisen? dann musst du nämlich die Hochkommas weglassen.

Ausserdem solltest du nicht vergessen den mit malloc reservierten Speicherplatz wieder mit free freizugeben wenn er nicht mehr benötigt wird, da du sonst (je nach Betriebssystem) Speicherlecks verursachst.


EDIT: Mist Windalf war schneller

Dieser Post wurde am 29.03.2004 um 21:50 Uhr von Guybrush Threepwood editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.03.2004, 22:26 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Mist Windalf war schneller ...


hab halt flinke Finger
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: