2010-09-23 93 views
0

id喜欢用未知数量的参数产生一个进程。 到目前为止我的代码(使用功率++):spawnv调用数组的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); 

但它的崩溃。为什么?

谢谢! -dominik

回答

1

saParameters[i]是什么类型?

也许你需要将此行更改为:

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

包括零终止。

0

saParameters是什么类型的?我的猜测,不知道是否GetLength()返回不包含NUL终止符的字符数。由于strcpy自动添加,因此会导致saParameters阵列内的每个缓冲区溢出。

0

您不会为终止空字符分配足够的空间。

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

应该是

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

saParameters是WStringArray,在电力++开发环境中定义的类。 感谢您的回答!但应用程序仍然崩溃。 (崩溃在spawnv() - 线)

0

的同意,我们发现了问题所在:

  1. 的对GetLength()+ 1是正确的 - 感谢你;)
  2. 最后一个数组元素(指针)在psaParameters中必须是NULL,所以spawnv() - 方法知道何时停止从参数数组读取参数。