CommNews Forum Home  

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

Antworten
 
Themen-Optionen Thema bewerten Ansicht
  #1  
Alt 08-01-2008, 22:45
Benutzerbild von Der_Mosch
Der_Mosch Der_Mosch ist offline
Fieser Pappkopp

 
Registriert seit: Jan 2001
Beiträge: 8.506
Der_Mosch ist...
Der_Mosch eine Nachricht über ICQ schicken Der_Mosch eine Nachricht über MSN schicken
Style: cncboard
Wie gesagt, nicht meine Woche.
__________________
Zitat:
Zitat von Mokus Beitrag anzeigen
PS: Das Loch interressiert mich schon seit 7 Jahren
I ELUCIDATE THE TRUTH OF A CASE FROM NOW ON!
Mit Zitat antworten
  #2  
Alt 14-01-2008, 13:02
Benutzerbild von Der_Mosch
Der_Mosch Der_Mosch ist offline
Fieser Pappkopp

 
Registriert seit: Jan 2001
Beiträge: 8.506
Der_Mosch ist...
Der_Mosch eine Nachricht über ICQ schicken Der_Mosch eine Nachricht über MSN schicken
Style: cncboard
Ich benutz den Thread noch mal... hier mein Code:

Code:
	cout << "Anzahl der Agenten: ";
	cin >> agentsCount;
	int *agentx, *agenty;
	agentx = new int [agentsCount];
	agenty = new int [agentsCount];

	for (int a = 0; a < agentsCount; ++a)
		{
			agentx[a] = 0;
			agenty[a] = 0;
		}
Nach Ausführung des Codes existiert agenty, agentx hingegen nicht. Irgendwelche Vorschläge?
__________________
Zitat:
Zitat von Mokus Beitrag anzeigen
PS: Das Loch interressiert mich schon seit 7 Jahren
I ELUCIDATE THE TRUTH OF A CASE FROM NOW ON!
Mit Zitat antworten
  #3  
Alt 14-01-2008, 18:30
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
Was heißt agenty existiert nicht? Fehlermeldung, wenn du drauf zugreifen willst?

Ich habe das jedenfalls eben bei mir ausgeführt... und der gdb kann mir zum Inhalt beider Arrays Werte - sprich 0 - ausspucken...



Sofern du nicht woanders in deinem Code den Speicher überschreibst ... Bin allerdings auch noch "relativ" C (von c++ gar nicht zu reden ) unerfahren... (und grad selber auf Fehlersuche... und such grad innerhalb von 600 Zeilen Code nach der Nadel im ... äh, meinem Fehler ... in Java hab ich nicht mal eben meinen Speicher überschrieben... verdammt! [edit]Zu meinem "Problem": was ist schlimmer, als einen Fehler zu suchen, und man hat keine Arnung, wo er verursacht wird? Wenn der vermeintliche Fehler gar kein Fehler ist... da kann dan suchen lange dauern. [/edit.] )

Geändert von klaus52 (14-01-2008 um 20:33 Uhr).
Mit Zitat antworten
  #4  
Alt 14-01-2008, 19:57
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
Denke auch, dass das Problem woanders liegt
Code:
#include <iostream>

using namespace System;
using namespace std;

int main(array<System::String ^> ^args)
{
	int agentsCount;
	int *agentx, *agenty;

	cout << "Anzahl der Agenten: ";
	cin >> agentsCount;

	agentx = new int [agentsCount];
	agenty = new int [agentsCount];

	for (int a = 0; a < agentsCount; ++a)
	{
		agentx[a] = a;
		agenty[a] = a;
	}
	for (int i=0 ; i < agentsCount ; i++)
	{
		cout <<	"x:" << agentx[i] << endl;
		cout <<	"y:" << agenty[i] << endl;
	}
	char text[4];
	while(strcmp(text, "q"))
	{
		gets(text);
	}
	return 0;
}
funktioniert einwandfrei
__________________


MfG Gonzo
Mit Zitat antworten
  #5  
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
  #6  
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
  #7  
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:12 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