|
#1
|
||||
|
||||
![]()
__________________
I ELUCIDATE THE TRUTH OF A CASE FROM NOW ON! |
#2
|
||||
|
||||
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! |
#3
|
||||
|
||||
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 ... ![]() ![]() ![]() Geändert von klaus52 (14-01-2008 um 20:33 Uhr). |
#4
|
||||
|
||||
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; } ![]() |
#5
|
||||
|
||||
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). |
#6
|
||||
|
||||
Richtig
![]() 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 ![]() |
#7
|
||||
|
||||
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]" ![]() |