分叉功能不分配指针

时间:2010-05-05 15:46:26

标签: c pointers fork

在下面的代码中我有一个函数int GetTempString(char Query[]); 在主要工作中称它为好。

但是,当从fork调用该函数时,fork会在此行之前挂起(停止运行,没有错误,没有输出):pch = strtok (Query," ,"); printf显示指向pch的指针为空。同样,这只有在fork执行时才会发生。

我做错了什么?

int main()
{
if((Timer =fork())==-1) printf("Timer Fork Failed");    
    else if(Timer==0)
    {
        while(1)
        {       
        sleep(2);       
        GetTempString("ch 1,2,3,4");        
        }
    }
    else
    {
         //CODE

         GetTempString("ch 1,2,3,4");
        }
}

int GetTempString(char Query[])
{
        char * pch;


    printf("DEBUG: '%s'-'%d'\n",Query,pch);

    pch = strtok (Query," ,");//* PROBLEM HERE*

        //while loop for strtok...

        return 1;

}

3 个答案:

答案 0 :(得分:2)

strtok修改其第一个参数指向的字符串(用NUL替换分隔符),但是你传入一个字符串文字,它是隐式的const。在调用strtok之前,需要将字符串复制到可写缓冲区中。

使用您的示例,这会在两个进程中发生,因此两者都会崩溃。当发布一个简短的示例来演示一个问题时,请务必首先编译并测试它,以确保它实际显示您遇到的问题,而不是一些完全不相关的问题(这可能就是这种情况)。

答案 1 :(得分:0)

您的函数返回一个局部变量,因此您有未定义的行为 - 之后可能发生任何事情。您需要使用malloc()动态分配要返回的字符串,或者将其作为参数传递给函数。

答案 2 :(得分:0)

TempString变量在GetTempString函数的堆栈上分配。使用此变量仅在GetTempString的上下文中使sens。使用静态TempString [50]来解决这个问题。