由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 请问一下关于new和delete的概念
相关主题
菜鸟问个问题,如果太简单了请原谅我的愚蠢问一道常见面试题,reverse a linked list
(C / C++) 关于指针的引用,求助写程序时的一个小问题?
用Java面试的大牛们真心请教35岁大妈找哪方面的计算机类工作?
C++疑问:Animal a,Animal* a,哪种访问方式快一道挺简单的题给搞砸了
汗,不问算法请教一段小程序
请教一个C语言指针奇怪的语法reverse linked list 问题, double 和 single 的不同
一道老题Leetcode 问题:remove Nth FromEnd 有一点儿不懂,謝謝指点!
问一个关于引用和指针的问题求助:面试题
相关话题的讨论汇总
话题: delete话题: 指针话题: 变量话题: 内存话题: int
进入JobHunting版参与讨论
1 (共1页)
s****A
发帖数: 80
1
我的理解是
1. new 开辟出来的内存必须由delete来回收
但是所delete的指针变量并不一定是new时所使用的指针变量,只要是指相同一个内存
地址的指针变量就可以
比如 int *a=new int;
a=100;
int * b=a;
delete b;
这样就不会造成内存泄露了,并不一定要delete a;对吗?
2.在用new开辟数组所需内存的时候,编译器是不是还要记住指针变量所对应的开辟内
存大小
比如 int *a=new int[100];
... ...
delete [] a;
这里a存放的只是一个内存地址,但是应该有某种机制记住了a之后是一片大小为100的
内存区域,否则就没办法用delete语句收回这些内存了吧
但是在这种情况下,是否就只能通过delete [] a来释放了?不能像 1 中的情况那样用
别的指针变量释放这片内存了?
谢谢!
w****a
发帖数: 710
2
1. 你可以delete b,不一定要delete a。但是记得delete b之后别调用a了。不然野指
针访问就够你喝一壶的。
2. 也可以通过别的指针变量去delete。
s****A
发帖数: 80
3
1.关于野指针,一般的做法是不是
delete b;
a=NULL; b=NULL;
?
2. 你的意思是我也可以
int *a=new int[100];
... ...
int *b=a;
delete [] b;
效果是一样的?

【在 w****a 的大作中提到】
: 1. 你可以delete b,不一定要delete a。但是记得delete b之后别调用a了。不然野指
: 针访问就够你喝一壶的。
: 2. 也可以通过别的指针变量去delete。

w****a
发帖数: 710
4
对啊,野指针问题在C++里很纠结。如果你在程序里全写裸指针的话,保证每次删除后
都NULL其实不够的。有时候你在不同对象里,有一个释放了,另一个还拥有所有权。那
还是容易出错。要么保证设计上不互相依赖,要么用类似shared_ptr的东西。
第二个一样的。

【在 s****A 的大作中提到】
: 1.关于野指针,一般的做法是不是
: delete b;
: a=NULL; b=NULL;
: ?
: 2. 你的意思是我也可以
: int *a=new int[100];
: ... ...
: int *b=a;
: delete [] b;
: 效果是一样的?

o****d
发帖数: 2835
5

动态分配的空间不关编译器的事
那是内存管理做的 在heap中 当然它需要记住动态开辟的内存块的大小

【在 s****A 的大作中提到】
: 1.关于野指针,一般的做法是不是
: delete b;
: a=NULL; b=NULL;
: ?
: 2. 你的意思是我也可以
: int *a=new int[100];
: ... ...
: int *b=a;
: delete [] b;
: 效果是一样的?

w**z
发帖数: 8232
6
快上Java 贼船。

【在 w****a 的大作中提到】
: 对啊,野指针问题在C++里很纠结。如果你在程序里全写裸指针的话,保证每次删除后
: 都NULL其实不够的。有时候你在不同对象里,有一个释放了,另一个还拥有所有权。那
: 还是容易出错。要么保证设计上不互相依赖,要么用类似shared_ptr的东西。
: 第二个一样的。

p*****2
发帖数: 21240
7

严重同意。scala也行。

【在 w**z 的大作中提到】
: 快上Java 贼船。
K**********g
发帖数: 118
8
楼主, wwzz和二爷说的并不是玩笑话。
看样子你也不是用过很多年c++的人,放弃c++也没什么可惜的。把你现在花在学习c++
上的精力,花在java上更值得。

【在 s****A 的大作中提到】
: 我的理解是
: 1. new 开辟出来的内存必须由delete来回收
: 但是所delete的指针变量并不一定是new时所使用的指针变量,只要是指相同一个内存
: 地址的指针变量就可以
: 比如 int *a=new int;
: a=100;
: int * b=a;
: delete b;
: 这样就不会造成内存泄露了,并不一定要delete a;对吗?
: 2.在用new开辟数组所需内存的时候,编译器是不是还要记住指针变量所对应的开辟内

s**x
发帖数: 7506
9
貌似你没搞清楚变量的基本概念, 变量就是 value 的 holder, 指针就是数, 只要是
数值一样的, delete a, delete b 肯定是一样的。 same for all the others.
h***i
发帖数: 1970
10
是,明显是新手,跳了贼船了,c++的工作的确没多少了。

【在 K**********g 的大作中提到】
: 楼主, wwzz和二爷说的并不是玩笑话。
: 看样子你也不是用过很多年c++的人,放弃c++也没什么可惜的。把你现在花在学习c++
: 上的精力,花在java上更值得。

1 (共1页)
进入JobHunting版参与讨论
相关主题
求助:面试题汗,不问算法
找工作除了算法 、指针、内存之类的玩意 还需要神马请教一个C语言指针奇怪的语法
请教一个问题一道老题
My Microsoft Phone Interview问一个关于引用和指针的问题
菜鸟问个问题,如果太简单了请原谅我的愚蠢问一道常见面试题,reverse a linked list
(C / C++) 关于指针的引用,求助写程序时的一个小问题?
用Java面试的大牛们真心请教35岁大妈找哪方面的计算机类工作?
C++疑问:Animal a,Animal* a,哪种访问方式快一道挺简单的题给搞砸了
相关话题的讨论汇总
话题: delete话题: 指针话题: 变量话题: 内存话题: int