将返回的指针赋给变量时出现分段错误

时间:2015-04-20 11:26:59

标签: c pointers

我已获得以下代码

char * find(struct node *r,char *str)
  {
      r=head;

     if(r==NULL)
     {
        return NULL;
     }

    while(r!=NULL)
   { 
       if((strcmp(str,r->name) == 0))
         {
           printf("found %s\n",r->name);
           char *p = malloc(256);
           strcpy(p,(const char *)r->name);
           return p;
         }
      r=r->next;

   }

  return NULL;

 }

main

void main () 
  {
    ......
    ......
    char *ret;
    ret = find(n,"someone");
    printf("%s\n",ret);
    .......
 }

使用上面的代码,我总是遇到分段错误。但是当我取消ret变量时。有用。

void main () 
{
   ......
   ......
   printf("%s\n",find(n,"someone"));
   .......
}

2 个答案:

答案 0 :(得分:7)

您的代码中存在许多问题(逻辑和编程)。例如,

  1. 您接受r作为参数,但请立即将其替换为head。为什么用作参数?
  2. strcmp()之前,您未在NULL中检查r->name
  3. 在使用返回的指针之前,您没有检查malloc()的成功。
  4. 如果find()返回NULL,则使用printf()中的返回值将导致undefined behaviour
  5. 现在,分段错误是未定义行为的副作用之一。首先纠正上述问题,使代码稳定。

    注意:除此之外,值得一提的是,main()的正确签名是int main(void)

答案 1 :(得分:0)

您检查NULL上的r,但不strname