You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言fork创建子进程后printf未输出AFTER Increment内容问题求助

问题根因分析

你遇到的子进程后半段打印不输出的核心原因是子进程运行过程中触发了段错误,直接提前终止,后续代码没有执行机会,具体错误点如下:

  • 变量x未声明:代码中没有对变量x做任何类型声明,直接在main函数中赋值x = 10、子进程中读写x属于C语言未定义行为,运行时会直接触发内存访问错误,子进程直接崩溃退出。
  • 参数类型传递不匹配:main函数中定义的nump本身是int *类型,调用concurrent函数时传参写的是&nump,实际类型为int **,但concurrent函数的第三个形参定义为int *nump,类型完全不匹配,后续对*nump的读写操作都是访问非法内存地址,直接触发崩溃。
  • 运算符优先级使用错误:你想实现的是给nump指向的整数值加1,但代码中写的*nump++因后缀++优先级高于解引用*,实际执行逻辑是先将nump指针本身偏移1个int长度,再解引用新的非法地址,进一步加剧内存访问错误,正确写法应为(*nump)++。
额外补充说明

你当前代码的进程创建逻辑也有问题:你只调用了1次fork(),只会生成1个子进程,父进程却循环numOfProcs次调用wait(),除了第一次能正常等到子进程退出,后续wait()都会调用失败。如果要生成指定数量的子进程,需要把fork()逻辑放到循环内执行。

内容的提问来源于stack exchange,提问作者C H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 11:36:03