Pointer-Arithmetik

$nooc

Mitglied
Hallo Leute.

Habe hier ein Problem mit der Pointer-Arithmetik.
Meine Funktion soll einem char Array die Adressen von bestimmten Namen übergeben.
Hierzu wird ihr ein Pointer auf ein eindimensionales Array übergeben.

In der Funktion will ich dann den Speicher für die Anzahl an char* reservieren,
die ich zur Übergabe der Namen benötige.

Aber anscheinend mache ich da irgendwas falsch, kann mir da jemand bitte helfen?

Vielen Dank.

C++:
#include <iostream>


class Object
{
private:

  // ...

public:

  int write (char*** message)
  {
    **message = new char[10];

    **message[0] = m_names.getName(0);
    **message[1] = m_names.getName(0);
    **message[2] = m_names.getName(0);

    return 0;
  }
};


int main()
{
  char **msg = new char*;

  Object obj;

  obj.write(&msg);

  printf("%s", msg);

  getchar();
  return 0;
}
 
Hi.

Mit Pointer-Arithmetik hat das ja eigentlich wenig zu tun.

Du hast da eine unnötige Indirektion drin. Wenn du innerhalb der write Methode immer nur auf **message zugreifst, warum hast du denn dann überhaupt die Adresse des Zeigers aus main übergeben? Da stimmt also etwas nicht.

Im Grunde willst du doch nur die Adresse eines Zeigers auf ein eindimensionales Array von C-Strings übergeben (und verändern). Typedefs können da hilfreich sein. Und Referenzen auch.

C++:
typedef char* cstring;
typedef cstring* cstringarray;

int write (cstringarray& msg) {
  delete[] msg;
  msg = new cstring[10];

  msg[0] = ...;
  msg[1] = ...;
}

int main() {
  cstringarray msg = 0;
  
  obj.write(msg);

  printf("%s", msg[0]);
}
Gruß
 
Zuletzt bearbeitet:
Hi, danke mal für die Hilfe, aber das problem dabei ist,
dass es sich hierbei um eine Aufgabe handelt und der Parameter
ist leider von der Angabe her vorgegeben.

edit:
warum funktioniert mein code nicht?
 
Zuletzt bearbeitet:
Hi, danke mal für die Hilfe, aber das problem dabei ist,
dass es sich hierbei um eine Aufgabe handelt und der Parameter
ist leider von der Angabe her vorgegeben.

edit:
warum funktioniert mein code nicht?
Ersetz doch einfach mal die Typdefs durch den expandierten Typ , dann siehst du den Unterschied.

\edit:
C++:
int write (char*** msg) {
  delete[] *msg;
  *msg = new char*[10];
 
  *msg[0] = ...;
  *msg[1] = ...;
}
 
int main() {
  char **msg = 0;
 
  obj.write(&msg);
 
  printf("%s", msg[0]);
}
Gruß
 
Zeile 13 und 14.



C++:
#include <iostream>

typedef char* cstring;
typedef cstring* cstringarray;

class object
{
public:
int write (cstringarray& msg) {
  delete[] msg;
  msg = new cstring[10];
 
  msg[0] = 'a';
  msg[1] = '\0';

  return 0;
}
};
 
int main() {
  cstringarray msg = 0;

  object obj;
 
  obj.write(msg);
 
  printf("%s", msg[0]);
}


lG
 
Zurück