调试我的C程序时,出现此错误消息

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff77f6700 (LWP 14945)]
__strcpy_sse2_unaligned ()
at ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:532
532 ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S: Aucun fichier ou dossier de ce type.


我认为发布我的代码是“无用的”,因为它无法精确显示错误行。

但我知道我认为它来自此功能:

void add_user(tlistU *lu, user * u,tuser *new)
{

      tuser *nouveau = malloc(sizeof(tuser));

      u =malloc(sizeof(*u));
      if (lu == NULL || nouveau == NULL)
      {
        exit(EXIT_FAILURE);
      }
   strcpy(nouveau->users->nickname,u->nickname);
   nouveau->next=lu->first;
   lu->first=nouveau;
}


(昵称是一个9个字符的字符串)

最佳答案

您的代码有点奇怪。但是,崩溃的原因可能是:

strcpy(nouveau->users->nickname,u->nickname);


请注意,nouveau是您刚刚请求的未初始化内存块。然后,您要访问nouveau->users->nickname,假定nouveau->users是有效的指针。

发生的另一件事是在此处覆盖u

u = malloc(sizeof(*u));


我怀疑您的实际意图是这样的:

nouveau->users = malloc(sizeof(*u));


这将解决两个问题。

07-26 05:59