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

标签 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"));
   .......
}

最佳答案

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

  1. 您接受 r 作为参数,但立即将其替换为 head。那为什么要用作参数呢?
  2. strcmp() 之前,您没有检查 r->name 中的 NULL
  3. 在使用返回的指针之前,您没有检查 malloc() 是否成功。
  4. 如果 find() 返回 NULL,在 printf() 中使用返回值将导致 undefined behaviour .

现在,段错误是未定义行为的副作用之一。首先纠正上述问题以使您的代码稳定。

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

关于c - 将返回的指针分配给变量时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29746591/

相关文章:

c - C中缺少符号编译错误。基本头文件设置

c - 如何使用 CLion 调试 fork 的子进程

c - 使用指针导航数组,而不是使用 int

c - 将 char* 拆分为 char * 数组

c++ - 错误 C2064 : term does not evaluate to a function taking 0 arguments

c - 三维指针数组,其中每个维度在 C 中的大小不同

c - 链表交点程序的改进

c - 在多线程环境中捕获信号

c - Struct fl 没有名为 sub 的成员

java - java中双向循环链表的插入