1

以下代码中的fork不起作用!它永远不会进入运行功能。你能告诉我这里有什么问题吗?

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void run(char* a)
{
    char* k=a;
    int i;
    for(i=0;i<3;i++)
      k[i]='s';
    printf("hi");
    return;
}
int main()
{   
    char* a="cbd";
    pid_t j;
    j=fork();
    printf("%d\t",j);
    int y;
    if(j==0)
      run(a);
    int i;
    for(i=0;i<3;i++)
      printf("%c\t",a[i]);
 return 0;
}

输出是

24180  c b d
4

3 回答 3

4

实际上run()函数被调用。但是k[i]='s';声明的问题。"cbd" 是字符串文字并且是只读的。

在本地为字符串分配内存并传递地址。

就像@Andy 提到的,子进程崩溃了。

于 2013-07-10T04:50:05.987 回答
1

问题在于k[i] = 's',它导致进程因总线错误而崩溃。原因是,您正在尝试编辑位于目标文件 RODATA 部分中的字符串文字“cbd”,该文件存储在只读内存中。如果将 main 的第一行更改为char a[3] = {'c', 'b', 'd'};您的程序按预期工作。

于 2013-07-10T04:56:02.600 回答
1

至于fork(),是没有问题的。这是你的 run() 函数。k 是指向 const 字符串的指针,因此 k[0]='s' 倾向于报告访问冲突。

于 2013-07-10T04:57:29.587 回答