我一直试图在函数中使用指向指针的指针,但似乎我没有正确地进行内存分配... 我的代码是:
#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);
}
此代码编译,但我无法运行程序..我遇到了分段错误。我该怎么办?任何帮助都将不胜感激!
答案 0 :(得分:2)
请注意,l
和l2
在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 );
}
答案 1 :(得分:1)
崩溃归因于(*l)->data=12;
,因为(*l)
实际上是未初始化的变量。
答案 2 :(得分:0)
这部分不正确:
l2=(struct list**)malloc( sizeof(struct list*));
(*l)->data=12;
您无法分配到未分配的结构。正确的代码将是:
*l = malloc(sizeof(struct list));
(*l)->data = 12;