0

我对某事感到非常困惑。我有一个循环,它从子进程读回值并将它们插入到 char 数组中(称为 sleepTime)。我得到了正确的值(我在将它们放入我的 char 数组后立即在控制台中显示它们)但是当循环读取下一个值时,数组中的所有内容都会更新为从管道读回的当前值。退出循环后,我再次打印结果,数组的每个元素都是最后读取的值。任何人都可以阐明这一点吗?我很困惑。

char* sleepTime[4];
char randNumSend[15];
char randNumRet[15];
for (int i=0; i<nWorkers; i++){ // loop to read back values from child process
    read(pipe2[0],randNumRet,strlen(randNumSend));  // read back data
    sleepTime[i]=randNumRet; // save values as string for execlp command
    cout << "sleepTime" << i+1 << ": " << sleepTime[i]<< endl;
}

close(pipe2[0]);    // close read end of pipe2

for (int i =0; i<nWorkers; i++){
    cout << "sleepTime" << i+1 << ": " << sleepTime[i]<< endl;
}
4

2 回答 2

0

char* sleepTime[4];是一个指针数组。

如果您写信给sleepTime[i]您正在写入未分配的内存。这是一个错误。

要进行分配,您可以遍历数组并执行以下操作:

sleepTime[i] = malloc(sizeof(char) * length_of_string);

然后不要忘记做同样的事情free(sleepTime[i]);以避免泄漏。

在 C++ 中使用std::string

用法:

std::string foo = "blah blah";

std::string bar;  

bar = "blah blah";
于 2013-03-13T19:27:11.603 回答
0

睡眠时间的值都指向同一个数组。我建议尝试 sleeptime[4][15] 并将 randNumRet 替换为 sleeptime[i] (在读取函数中)

于 2013-03-13T19:29:38.303 回答