2010-09-23 4 views
0

id aime générer un processus avec un nombre inconnu de paramètres. mon code à ce jour (en utilisant la puissance ++):spawnv appel avec tableau de tableau de char (char * argv [])

char** psaParameters = new char*[ saParameters.GetCount() ]; 

      for(int i = 0; i < saParameters.GetCount(); i++) 
      { 
       psaParameters[ i ] = new char[ saParameters[ i ].GetLength() ]; 
       strcpy(psaParameters[ i ], saParameters[ i ].GetText()); 
      } 

      spawnv(P_WAIT, psaParameters[ 0 ], psaParameters); 

mais il s'écraser. Pourquoi?

merci! -dominik

Répondre

1

De quel type est le saParameters[i]?

Probablement vous devez changer cette ligne:

psaParameters[ i ] = new char[ saParameters[ i ].GetLength() + 1 ]; 

pour inclure le zéro de terminaison.

0

Quel est le type de saParameters? Ma conjecture, sans savoir que c'est GetLength() renvoie le nombre de caractères ne comprenant pas un terminateur NUL. Puisque strcpy ajoute automatiquement ceci, cela entraînerait le débordement de chacun des tampons à l'intérieur du tableau saParameters.

0

Vous n'attribuez pas suffisamment d'espace pour le caractère nul final.

psaParameters[ i ] = new char[ saParameters[ i ].GetLength() ]; 

devrait être

psaParameters[ i ] = new char[ saParameters[ i ].GetLength() + 1 ]; 
0

saParameters est un WStringArray, une classe définie dans l'environnement de développement de l'énergie ++. merci pour vos réponses jusqu'à présent! mais l'application se bloque toujours. (il se bloque dans le spawnv() - ligne)

0

ok, nous avons découvert quel était le problème:

  1. la GetLength() + 1 était correct - merci;)
  2. le dernier tableau L'élément (pointeur) dans psaParameters devait être NULL pour que la méthode spawnv() sache quand arrêter la lecture des arguments du tableau d'arguments.
Questions connexes