|
|
|
#1
|
||||
|
||||
|
Zitat:
![]()
__________________
C3H6O Aceton Burning squirrel Und nicht vergessen: Dieser Beitrag hat Superkuh-Kräfte! |
|
#2
|
||||
|
||||
Wie gesagt, nicht meine Woche.
__________________
I ELUCIDATE THE TRUTH OF A CASE FROM NOW ON! |
|
#3
|
||||
|
||||
|
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;
}
__________________
I ELUCIDATE THE TRUTH OF A CASE FROM NOW ON! |
|
#4
|
||||
|
||||
|
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). |
|
#5
|
||||
|
||||
|
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;
}
![]() |
|
#6
|
||||
|
||||
|
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]);
}
Code:
klaus52@klaus52-lap:~/workspace/cs349-ui$ ./free *** glibc detected *** /home/klaus52/workspace/cs349-ui/free: free(): invalid pointer: 0x0804859c *** 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). |
|
#7
|
||||
|
||||
|
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 ![]() |