Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

11

15.11.2009, 23:38

Zitat von »"unsigned long"«

drum sag ich immer die leute sollen erst c grundlagen lernen, bevor sie auf c++ umsteigen und vorgefertigten kram nutzen.


wenn man mit den richtigen büchern c++ lernt dann lernt man die wichtigen grundlagen von c gleich mit. wenn man sich allerdings mit tutorials rum schlägt hast du recht^^

ich hab mit c++ angefangen und bin froh darüber. in c lernt man nur techniken die man in c++ nur schaden und schwer ab zu gewöhnen sind.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

carli

unregistriert

12

16.11.2009, 08:43

Zitat von »"$nooc"«

ok i c ^^


aber kann mir noch jemand sagen warum hier bei free() ein fehler geworfen wird?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdlib.h>


int main()
{

  char *input = malloc(sizeof(char));
  
  input = 'a';

  printf(input);

  free(input);
  input = NULL;

  return 0;
}


Weißt du, was ein Zeiger ist?
Anscheinend nicht.
Andere Frage: warum merkt der Compiler nicht, dass du einem Zeiger ein Char zuweisen willst?
Es gibt 2 Möglichkeiten, das Problem zu lösen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <stdlib.h>


int main()
{

  char input = 'a';

  printf(input);

  return 0;
}

oder

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdlib.h>


int main()
{

  char *input = malloc(sizeof(char));
  
  input[0] = 'a';
  input[1] = 0;

  printf(input);

  free(input);

  return 0;
}

13

16.11.2009, 11:06

Zitat von »"carli"«

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>

int main()
{

  char *input = malloc(sizeof(char));
  
  input[0] = 'a';
  input[1] = 0;

  printf(input);

  free(input);

  return 0;
}

Auch wenn das auch noch nicht ganz korrekt ist, da der angeforderte Speicher zu klein ist um Platz für zwei Zeichen zu haben...
Tutorials zu OpenGL, Ubuntu und Programmieren allgemein: www.tomprogs.at

Forum und Wiki zum Programmieren lernen: proggen.org/forum.proggen.org

carli

unregistriert

14

16.11.2009, 16:55

oooops
mist.

es muss natürlich so heißen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 

  char *input = malloc(2*sizeof(char)); 
  
  input[0] = 'a'; 
  input[1] = 0; 

  printf(input); 

  free(input); 

  return 0; 
}


Aber ich frage mich trotzdem: Warum hat der Compiler beim Type Mismatch nicht angeschlagen?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

15

16.11.2009, 18:29

Oder auch einfach:

C-/C++-Quelltext

1
char *input = malloc(2);

carli

unregistriert

16

16.11.2009, 18:35

würde ich mich zurückhalten - was ist, wenn man einfach mal so Unicode einführt und man das Programm porieren will in eine solche Sprache?
Heutzutage würde es niemand als "Hack" bezeichnen, aber man sollte sich schon immer Gedanken machen: Wie sehen Hardware und Software in 20 Jahren aus?

unsigned long

Treue Seele

Beiträge: 140

Wohnort: Herzogenrath

Beruf: Fachinformatiker Fachrichtung Anwendungsentwicklung

  • Private Nachricht senden

17

16.11.2009, 21:35

Zitat von »"NachoMan"«

in c lernt man nur techniken die man in c++ nur schaden und schwer ab zu gewöhnen sind.
IMHO: Blödsinn.

carli

unregistriert

18

16.11.2009, 21:50

Zitat von »"unsigned long"«

Zitat von »"NachoMan"«

in c lernt man nur techniken die man in c++ nur schaden und schwer ab zu gewöhnen sind.
IMHO: Blödsinn.


erster Satzteil ist wahr, zweiter Satzteil würd ich nicht so unterstreichen.
malloc und new[] sind ein paar bööse Konstrukte, genauso wie der untypisierte Charakter (im Sinne von der Eigenart, keine Typechecks durchzuführen) von C.

Dass es sich schwer abzugewöhnen ist, würd ich bestreiten. Ich hab auch Assembler genutzt (da macht man sowas wie "char*" die ganze Zeit) und kann trotzdem mit objektorientierten Strings umgehen.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

19

16.11.2009, 22:08

Zitat

malloc und new[] sind ein paar bööse Konstrukte

Warum denn böse? Und was hat new jetzt mit C zu tun?

Klar ist der unbedachte Einsatz von malloc gefährlich. Aber auch Fahrradfahren ist gefährlich, wenn man nicht bei der Sache ist..

Und im übrigen wird ja niemand gezwungen gewisse Sprachmittel zu benutzen. Man kann ja auch abstrahiert arbeiten ohne jegliche "gefährliche" Mittel zu benutzen.

Zur C/C++ Diskussion: Das sind verschiedene Sprachen mit verschiedenen Zielen. Es ist nicht der Sinn das einte in die andere Sprache übertragen zu wollen. Man geht ja auch nicht hin und vergelicht C mit Lisp (im Sinne von besser/schlechter). Klar kann man als C Programmierer in C++ fast genau so weiterprogrammieren, wie in C, aber wer das tut hat definitiv etwas nicht verstanden.

unsigned long

Treue Seele

Beiträge: 140

Wohnort: Herzogenrath

Beruf: Fachinformatiker Fachrichtung Anwendungsentwicklung

  • Private Nachricht senden

20

16.11.2009, 22:10

geschadet hat es mir nicht, im gegenteil es hat sogar sehr gehofen. gerade im bezug auf das verständnis der vtbl usw.

Werbeanzeige