当前位置: 技术问答>linux和unix
关于指针变量,struct 变量,指针使用的一些疑惑,望高手指教
来源: 互联网 发布时间:2015-12-16
本文导语: #include int main(){ struct list_head{ struct list_head *prev,*next; ...
#include int main(){
struct list_head{
struct list_head *prev,*next;
};
struct list_head example_list_struct;
struct list_head *example_list_pointer;
example_list_struct.prev=NULL;
example_list_pointer->prev=NULL;
//printf("")
return 0;
}
example_list_struct.prev=NULL 为什么运行到这一句程序不会dump掉?定义一个结构体变量
系统会为其分配内存空间吗?
example_list_pointer->prev=NULL 为什么运行到这一句的时候程序会dump掉?
两个都是对指针(即地址)的引用,为什么第一个不会dump掉啊?
struct list_head{
struct list_head *prev,*next;
};
struct list_head example_list_struct;
struct list_head *example_list_pointer;
example_list_struct.prev=NULL;
example_list_pointer->prev=NULL;
//printf("")
return 0;
}
example_list_struct.prev=NULL 为什么运行到这一句程序不会dump掉?定义一个结构体变量
系统会为其分配内存空间吗?
example_list_pointer->prev=NULL 为什么运行到这一句的时候程序会dump掉?
两个都是对指针(即地址)的引用,为什么第一个不会dump掉啊?
|
>>>example_list_struct.prev=NULL 为什么运行到这一句程序不会dump掉?
===================================================================
struct list_head example_list_struct; example_list_struct又不是指针类型,他的空间在堆栈里,在堆栈里example_list_struct 占用了sizeof(struct list_head)的字节.这样写是合法的.
>>>定义一个结构体变量系统会为其分配内存空间吗?
==================================================================
不是动态分配内存的话,系统都会为其分配内存.
>>>example_list_pointer->prev=NULL 为什么运行到这一句的时候程序会dump掉?
==================================================================
example_list_pointer 是一个指针类型,他本身在堆栈里占用4个字节(32位系统),这4个字节保存结构list_head的地址, 而example_list_pointer并没有使他指向一个有效结构list_head的内存空间,这是使用这个指针会造成不可预料的错误. 这样使用是非法的.当使用指针的时候,要么使他指向一个现有的结构地址,或者可以动态分配一块空间.
>>>两个都是对指针(即地址)的引用,为什么第一个不会dump掉啊?
==============================================================
一个是局部变量, 系统会在堆栈中分配sizeof (struct list_head)个空间.
一个指针,系统在堆栈中只是分配一个4个字节的空间用来保存该指针指向的空间的地址,他并没有指向任何有效的结构.
===================================================================
struct list_head example_list_struct; example_list_struct又不是指针类型,他的空间在堆栈里,在堆栈里example_list_struct 占用了sizeof(struct list_head)的字节.这样写是合法的.
>>>定义一个结构体变量系统会为其分配内存空间吗?
==================================================================
不是动态分配内存的话,系统都会为其分配内存.
>>>example_list_pointer->prev=NULL 为什么运行到这一句的时候程序会dump掉?
==================================================================
example_list_pointer 是一个指针类型,他本身在堆栈里占用4个字节(32位系统),这4个字节保存结构list_head的地址, 而example_list_pointer并没有使他指向一个有效结构list_head的内存空间,这是使用这个指针会造成不可预料的错误. 这样使用是非法的.当使用指针的时候,要么使他指向一个现有的结构地址,或者可以动态分配一块空间.
>>>两个都是对指针(即地址)的引用,为什么第一个不会dump掉啊?
==============================================================
一个是局部变量, 系统会在堆栈中分配sizeof (struct list_head)个空间.
一个指针,系统在堆栈中只是分配一个4个字节的空间用来保存该指针指向的空间的地址,他并没有指向任何有效的结构.