簡體   English   中英

將返回的指針分配給變量時出現分段錯誤

[英]segmentation fault when assign returned pointer to variable

我有以下代碼

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()使用返回值將導致未定義的行為

現在,分割錯誤是不確定行為的副作用之一。 首先更正上述問題,以使您的代碼穩定。

注意:與此值得一提的是, main()的正確簽名是int main(void)

您在r上檢查NULL ,但不在strname

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM