我正在调用一个函数,它将为我分支并执行另一个进程的代码。有多个进程,标记为B,C和D.我具有几乎相同的代码来创建不同的进程。由于我无法发现的一些奇怪的原因,过程创建功能之一导致了分段错误。他们看起来和我一样。任何偶然有人可能会感受到的机会,也许能让我对这个问题有所了解?C中的奇怪sprintf错误
void spawn_process_b(int fileID[]){
int pid;
char * argv[2];
sprintf(argv[0], "%d", fileID[0]);
sprintf(argv[1], "%d", fileID[1]);
pid = fork();
if (pid == 0)
{
execv("PipeW1", argv);
}
}
void spawn_process_c(int fileID[]){
int pid;
char * argv[2];
sprintf(argv[0], "%d", fileID[0]);
sprintf(argv[1], "%d", fileID[1]);
pid = fork();
if (pid == 0)
{
execv("PipeW2", argv);
}
}
通过投入断点与COUT < < “BP1” < < ENDL;等等,我发现spawn_process_b将会执行得很好。 spawn_process_c将进入,但在第一个sprintf指令中获得段错误。有人有主意吗?最初,spawn_process_b给我带来了麻烦,而且......我的手对上帝......我没有改变一件事,并开始工作。我几乎想知道这是否可能依赖于环境?
为什么它会在spawn_process_b中工作?而且它确实在工作......被调用的附加进程会将结果输出到屏幕上,以证明它正在获取值。 – rybosome 2010-08-17 21:04:17
这适用于两段代码。 'char * argv [2]'分配两个指针的数组,但不初始化任何一个指针。 – Thanatos 2010-08-17 21:04:30
@Ryan:你幸运。这是未定义的行为 - 它可能工作,它可能不会,取决于当前的内存状态。 – Thanatos 2010-08-17 21:05:11