CommNews Forum Home  

Zurück   CnC Foren > Verschiedenes > Tech-Support / Tech-Talk

Antworten
 
Themen-Optionen Thema bewerten Ansicht
  #1  
Alt 22-01-2008, 08:25
Benutzerbild von klaus52
klaus52 klaus52 ist offline
cf#t~Wrd

 
Registriert seit: Dec 2000
Ort: Mannheim
Beiträge: 7.654
klaus52 ist ein C...
klaus52 eine Nachricht über ICQ schicken
OL Nick: klaus52
Style: Dune
Ich hab da grad auch mal ein C-Problem... ich denke mal das passt hier rein, auch wenns kein C++ ist ... vermutlich ists für den Ausschnitt eh wurscht

Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main (void) {

	char *instructions[1];
	int n;

 	for(n=0;n<1;n++) {
        	instructions[n]=(char*) malloc(sizeof(char)*70);  //malloc size for chars of maximum length 70
       }

	instructions[0] = "Welcome to...";
	
	
	free(instructions[0]);
}
Tja, das free klappt nicht, sondern verursacht böse Fehlermeldungen, beim ausführen... :
Code:
klaus52@klaus52-lap:~/workspace/cs349-ui$ ./free
*** glibc detected *** /home/klaus52/workspace/cs349-ui/free: free(): invalid pointer: 0x0804859c ***
+ Backtrace und Memory Map...

Tja, bis jetzt hatte ich meine Anwendung munter for mich her gespielt, ohne auf Speicher zu achten... dachte aber, dass das vielleicht doch nciht die beste Idee iist, aber ich bekomm das free einfach nicht hin, und bin gerade eigentlich nur noch am blöd rumprobieren - was ein Zeichen dafür ist, dass ich wohl besser ins Bett sollte... falls mir trotzdem jemand weiterhelfen könnte, wär das toll!

P.S.: Da mach ich die ganzen letzten Stunden rum, und finde gerade nach dem abschicken per Zufall die Lösung...
strcpy(instructions[0], "Welcome to..." );
statt
instructions[0] = "Welc..."

Ich hab jetzt zwar noch nicht geschaut, was strcpy wirklich macht, und wieso das dann klappt, und anders ist... aber immerhin: Es klappt ... warum les ich bei gelegenheit nach... falls jemand dei Muße hat es zu erklären, hab ich aber auch nichts gegen
P.P.S: Okay, durch die direkte uweisung veränder ich die Adresse auf die instruction[0] zeigt, durch strcpy, kopier ich den String dahin wohin instruction[0] vorher zeigt ... den Platz, den ich mit kmalloc reserviert habe... klingt soweit logisch

Geändert von klaus52 (22-01-2008 um 08:46 Uhr).
Mit Zitat antworten
  #2  
Alt 22-01-2008, 17:12
Benutzerbild von Gonzo
Gonzo Gonzo ist offline
Cabal

 
Registriert seit: Dec 2002
Ort: Berlin
Beiträge: 2.476
Gonzo hat noch keine Bewertung oder ist auf 0
Style: USA
Richtig In c darf man strings nicht durch = zuweisen sondern immer durch irgendwelche string-Functionen ( Ausnahme ist direkt bei der Declaration, siehe unten ). Bei einzelnen Zeichen geht das aber, da muss man dann nur darauf achten am Schluss eine 0 zu setzen. z.B.
instructions[0][0] = 'W';
instructions[0][1] = 0;
und schon gibs bei der Ausgabe nen W.
Ansonsten ist dein Beispiel aber ziemlich unsinnig, denke aber mal es ist nur ein Beispiel für das Problem als solches.
Ein einfaches
char instructions[] = {"Welcome ..."};
hätte den selben Effekt und du brauchst kein free().
Genau betrachtet gibt es gar keine strings, sondern nur char-Arrays
__________________


MfG Gonzo
Mit Zitat antworten
  #3  
Alt 23-01-2008, 07:33
Benutzerbild von klaus52
klaus52 klaus52 ist offline
cf#t~Wrd

 
Registriert seit: Dec 2000
Ort: Mannheim
Beiträge: 7.654
klaus52 ist ein C...
klaus52 eine Nachricht über ICQ schicken
OL Nick: klaus52
Style: Dune
Schöne Erklärung, danke!

Und ja, dass beispiel war etwas verkürzt... vorher wurde die Schleife häufiger durchlaufen, sprich ich hatte neben instructions[0] noch einige andere Char-Arrays "instructons[n]"
Mit Zitat antworten
Antworten

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:36 Uhr.


Powered by vBulletin Version 3.7.3 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Template-Modifikationen durch TMS

Affiliates
United Forum GetBoinKeD cnc.onlinewelten.de