我正在調用一個函數,它將爲我分支並執行另一個進程的代碼。有多個進程,標記爲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