2014-11-04 77 views
0
  1. 如果我定义存储象下面const char *值将存储在哪里。什么是堆栈崩溃和堆崩溃?

    char arr[100] = "hello how are you"; 
    

    其中是该字符串("hello how are you")char数组是什么呢? (堆栈/堆/数据区/别的地方?)。

  2. 堆栈溢出VS堆栈崩溃

    是什么堆栈溢出崩溃之间的区别。发生堆栈崩溃时?

  3. 还堆溢出vs堆崩溃?

  4. 堆栈溢出/堆溢出时会发生什么?

+7

你已经清楚地分开你的问题分为四个不同的问题。应该单独询问这些问题,单击每个问题的[“Ask Question”](http://stackoverflow.com/questions/ask)按钮。请这样做,这样我们可以分别回答每个问题:) – 2014-11-04 10:51:43

+1

这可能会回答你的问题的一部分http://www.geeksforgeeks.org/memory-layout-of-c-program/ – amudhan3093 2014-11-04 11:27:32

回答

3
  1. 字符串文本被存储在只读存储器和持续的节目的长度。因此,从函数返回这个指针是安全的

const char *f() 
{ 
    return "Hello"; 
} 

就你而言,你将字符串文字的内容复制到本地字符数组变量中。所以"hallo how are you"char arr[100]的存储是不同的。

您可以修改arr,并且每次程序流回到那一行时,arr将再次用原始字符串初始化。您不能从函数返回指向arr的指针,因为arr只是一个局部变量。

提示:只有char arr[] = "hallo how are you";是必要的,除非你想添加更多的字符而不是你的字符串。

  1. 我不知道什么是“堆栈崩溃”。

  2. 我不知道堆可以溢出。但是,在堆上分配内存的请求可能会失败。我不知道“堆崩溃”是什么。

  3. 当发生堆栈溢出时,程序通常会崩溃。当分配堆内存请求失败,malloc将返回NULL和new将抛出std::bad_alloc

+0

'char arr [100] =“你好吗“;'' - >数组的初始化听起来更好。 – 2014-11-04 10:58:59

+0

@SouravGhosh更改 – 2014-11-04 11:02:16

+0

'复制字符串文字的内容'也许这也需要重新措辞。 – 2014-11-04 11:04:14

相关问题