我期待这段代码
void func(int* count)
{
*count += 1;
char* buf[100];
sprintf(buf, "%d -> %d\n", count, *count);
write(1, buf, strlen(buf));
}
int main()
{
int* count = 0;
int pid = fork();
if(pid == 0)
{
func(&count);
}
else
{
func(&count);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
将打印
1444711088 -> 1
1444711088 -> 2
Run Code Online (Sandbox Code Playgroud)
因为2 fork使用相同的内存单元格(1444711088)作为count变量,当其中一个修改它的值时,其他一个将受到影响.但它没有按预期工作.打印这个:
1444711088 -> 1
1444711088 -> 1
Run Code Online (Sandbox Code Playgroud)
你能说出这段代码的问题在哪里吗?
您询问:
你能说出这段代码的问题在哪里吗?
代码存在问题,但不是您认为的问题.您对分叉流程如何工作的理解并不恰当.
每个进程都有自己的进程内存空间副本.地址1444711088父进程是从地址不同1444711088的子进程.它们可以保持独立变化的值.
您的代码受到未定义的行为的影响.
int* count = 0;
Run Code Online (Sandbox Code Playgroud)
将指针初始化0为不是有效地址.你的意思是使用:
int count = 0;
Run Code Online (Sandbox Code Playgroud)
代替?