首页 > 试题广场 >

对于以下代码,char * p= newchar[100]

[单选题]
对于以下代码,说法正确的是
char * p= new char[100]

  • p 和 new出来的内存都在栈上
  • p 和 new出来的内存都在堆上
  • p在栈上 new出来的在堆上
  • p在堆上 new出来的在栈上
推荐
答案:c
解释:
动态分配就在堆区,其他都不在堆区
编辑于 2015-02-04 09:53:08 回复(1)
动态分配在堆中,其它的内存分配都在栈上进行。
发表于 2016-05-19 15:55:05 回复(0)

堆内存和栈内存的区别可以用如下的比喻来看出:使用堆内存就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。使用栈内存就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。操作系统中所说的堆内存和栈内存,在操作上有上述的特点,这里的堆内存实际上指的就是(满足堆内存性质的)优先队列的一种数据结构,第1个元素有最高的优先权;栈内存实际上就是满足先进后出的性质的数学或数据结构。


在标准C语言上,使用malloc等内存分配函数获取内存即是从堆中分配内存,而在一个函数体中例如定义一个数组之类的操作是从栈中分配内存。


我们掌握堆内存的权柄就是返回的指针,一旦丢掉了指针,便无法在我们视野内释放它。这便是内存泄露。


引自:百度百科_堆内存


发表于 2018-10-17 00:56:22 回复(2)
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。     栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除变量的存储区。里面的变量通常是局部变量、函数参数等。     堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。 char * p= new char[100] ,指针p存储在栈中,他分配的是一块栈内存,意思就是:在栈内存中存放了一个指向一块堆内存的指针p。new出来的存在堆中
编辑于 2019-06-14 11:38:07 回复(0)
堆内存用于动态内存的申请,其他的变量存在栈内存中。
发表于 2015-10-22 07:57:51 回复(0)
答案: 堆(heap)程序员分配释放,栈(stack)编译器自动分配释放。
发表于 2015-09-05 19:19:49 回复(0)
指针 在栈,new在堆
发表于 2016-05-31 20:22:40 回复(0)
咋感觉没人回答对吗? 我来回答一下吧 p是个指针,是个局部变量,p本身位于栈上。而p指向的内存位于堆上。
发表于 2024-05-23 22:00:44 回复(0)
动态分配在堆中,其余内存在栈中
发表于 2023-05-12 17:32:28 回复(0)
……………………这个没学C++,没仔细看脑子抽了看成了 char new[100],奇怪的脑力场
发表于 2021-10-01 10:41:22 回复(0)
所以 赋值操作不是将堆生成char[100]赋给p?那么p不是在堆中?
发表于 2021-01-26 11:58:21 回复(0)
动态分配在堆中,其它的内存分配都在栈上进行。
发表于 2020-05-24 20:47:02 回复(0)

动态分配在堆上

发表于 2018-08-20 20:07:31 回复(0)

*p 在栈上,new出来的在堆上,栈p ***

发表于 2018-07-02 13:40:04 回复(0)
动态分配在堆中,其它的内存分配都在栈上进行
发表于 2017-10-12 19:51:18 回复(0)

程序员可以申请释放的就是在堆区,其他的就在栈区,栈区的系统自动释放

发表于 2017-08-13 16:28:33 回复(0)
动态分配在堆中,其他分配在栈中
发表于 2017-02-20 22:01:16 回复(0)