繁体   English   中英

使用指针指向指针时出现分段错误

[英]segmentation fault when using pointer to pointer

我一直试图在函数中使用指针,但是似乎我没有正确地进行内存分配...我的代码是:

#include<stdio.h>
#include<math.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>


struct list{
       int data;
       struct list *next;
};

void abc (struct list **l,struct list **l2)
{
     *l2=NULL;
     l2=(struct list**)malloc( sizeof(struct list*));
     (*l)->data=12;
     printf("%d",(*l)->data);
     (*l2)->next=*l2;
 }

 int main()
 {
     struct list *l,*l2;
     abc(&l,&l2);
     system("pause");
     return(0);
 }

这段代码可以编译,但是我无法运行该程序。我遇到了分段错误。我该怎么办?任何帮助将不胜感激!

注意, ll2在main中被声明为指针,并且两个都没有初始化为指向任何东西。 所以,你有两种选择,要么初始化指针main ,然后用它们在abc ,或在初始化指针abc

根据您所写的内容,似乎您想在abc进行初始化。 要做到这一点,你必须malloc足够内存来存放struct list ,然后设置指针指向该内存。 产生的abc函数如下所示

void abc( struct list **l, struct list **l2 )
{
    *l  = malloc( sizeof(struct list) );
    *l2 = malloc( sizeof(struct list) );

    if ( l == NULL || l2 == NULL )
    {
        fprintf( stderr, "out of memory\n" );
        exit( 1 );
    }

    (*l)->data = 12;
    (*l)->next = *l2;

    (*l2)->data = 34;
    (*l2)->next = NULL;

    printf( "%d %d\n", (*l)->data, (*l2)->data );
}

崩溃是由于(*l)->data=12; 因为(*l)实际上是一个单位化变量。

这部分不正确:

 l2=(struct list**)malloc( sizeof(struct list*));
 (*l)->data=12;

您无法分配给未分配的结构。 正确的代码应类似于以下内容:

 *l = malloc(sizeof(struct list));
 (*l)->data = 12;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM