Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

单链表问题 #1

Open
ujsyehao opened this issue Jun 14, 2018 · 6 comments
Open

单链表问题 #1

ujsyehao opened this issue Jun 14, 2018 · 6 comments

Comments

@ujsyehao
Copy link
Owner

ujsyehao commented Jun 14, 2018

Node *tmp;
tmp -> data = value;
tmp -> next = NULL;
defined in class
报错: segmentation fault
错误原因:结构体/结构体指针未分配内存就直接初始化

Node *tmp在编译器中执行的是什么操作?有没有分配内存?有没有初始化?

@ujsyehao
Copy link
Owner Author

ujsyehao commented Jun 14, 2018

指向结构体的指针

  • 删除指针,对应的结构体所占用的内存会被释放吗?

  • 结构体内存由栈、堆分配是否影响内存的释放?

@ujsyehao
Copy link
Owner Author

ujsyehao commented Jun 14, 2018

删除指针p:delete p和p = NULL的区别是什么?

  • delete p 表明该指针申请的内存在堆区中,delete指针,指针指向的结构体在内存中也被释放,指针也是直接删除掉吗?

  • p=NULL表明该指针不存放任何变量的内存地址,因为指针本身是一个地址,即该指针(地址)为0

@ujsyehao
Copy link
Owner Author

ujsyehao commented Jun 14, 2018

在链表的中间位置插入:
tmp -> next = pre;
pre = tmp;
tmp = NULL
该代码无用的原因是什么?

对pre指针直接赋值并不能修改链表,pre指针只是head指针的copy,直接赋值并不影响原来的链表,应该对pre指针指向的结构体进行修改,修改后的代码如下:
pre -> next = tmp;
tmp -> next = cur;

结构体指针直接赋值有什么作用?

@rawk-v
Copy link

rawk-v commented Jun 14, 2018

https://github.com/ujsyehao/data-structure/issues#issuecomment-397139788
https://github.com/ujsyehao/data-structure/issues#issuecomment-397140757

  • 使用delete p,会释放指针p对应的存储空间,对应使用new关键字分配的内存空间
  • p = NULL,只是把指针变量赋值为NULL,原来p指向的内存空间不会被释放
  • 如果结构体变量是栈变量(比如在某个函数里面使用,Data data();实例化的话),那么变量离开作用域之后就释放了空间;如果结构体变量是在堆里面分配的空间(如使用Data *p = new Data();),那么就需要显示地调用delete p才会释放内存。

@rawk-v
Copy link

rawk-v commented Jun 15, 2018

Node *tmp在编译器中执行的是什么操作?有没有分配内存?有没有初始化?

没有,只是声明了指针变量

delete p 表明该指针申请的内存在堆区中,delete指针,指针指向的结构体在内存中也被释放,指针也是直接删除掉吗?

指针指向的内存空间被释放,表示这一段内存空间已经被系统回收了,你的程序就没有权限使用这段内存了,但是指针变量p还是存储着原来那一段内存空间的地址,也就是p不为NULL。

@ujsyehao
Copy link
Owner Author

Node *tmp只是声明,而int a就是定义了

Repository owner deleted a comment from Pappyskull1 Feb 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants