【发布时间】:2010-12-09 01:02:50
【问题描述】:
所以,我有一个函数可以加载带有一些字符串数据的 char** 变量。我的目标是分叉这个过程,并在子进程中打印一些数据,以及从父进程中打印一些数据。但是,我无法在 fork() 调用之后引用指针。
我以为fork()复制了父进程的整个地址空间,好像里面会包含各种栈指针……
基本上,我的代码目前看起来像这样:
load_data(char **data);
char** data;
load_data(data);
printf("String 0: %s\n", data[0]);
fork();
printf("String 0 again: %s\n", data[0]); /* Segfaults Here! */
有人知道我做错了什么吗?我已经对此进行了一些谷歌搜索,似乎我正在做的事情应该有效 - 但事实并非如此。因此,我误解了一些基本的东西......
【问题讨论】:
-
“我以为fork()把父进程的整个地址空间都做了一个拷贝,好像里面会包含各种栈指针……” 这个与问题无关,但至少在大多数现代 UNIX 系统上,
fork在调用时不会复制整个地址空间。它使用 copy-on-write 方案;内存页一旦改变就会被复制。它感觉就像fork时复制的内存页。
标签: c pointers segmentation-fault fork