如果我定义存储象下面const char *值将存储在哪里。什么是堆栈崩溃和堆崩溃?
char arr[100] = "hello how are you";
其中是该字符串(
"hello how are you"
)char数组是什么呢? (堆栈/堆/数据区/别的地方?)。堆栈溢出VS堆栈崩溃
是什么堆栈溢出崩溃之间的区别。发生堆栈崩溃时?
还堆溢出vs堆崩溃?
堆栈溢出/堆溢出时会发生什么?
回答
- 字符串文本被存储在只读存储器和持续的节目的长度。因此,从函数返回这个指针是安全的
。
const char *f()
{
return "Hello";
}
就你而言,你将字符串文字的内容复制到本地字符数组变量中。所以"hallo how are you"
和char arr[100]
的存储是不同的。
您可以修改arr
,并且每次程序流回到那一行时,arr将再次用原始字符串初始化。您不能从函数返回指向arr
的指针,因为arr
只是一个局部变量。
提示:只有char arr[] = "hallo how are you";
是必要的,除非你想添加更多的字符而不是你的字符串。
我不知道什么是“堆栈崩溃”。
我不知道堆可以溢出。但是,在堆上分配内存的请求可能会失败。我不知道“堆崩溃”是什么。
当发生堆栈溢出时,程序通常会崩溃。当分配堆内存请求失败,
malloc
将返回NULL和new
将抛出std::bad_alloc
'char arr [100] =“你好吗“;'' - >数组的初始化听起来更好。 – 2014-11-04 10:58:59
@SouravGhosh更改 – 2014-11-04 11:02:16
'复制字符串文字的内容'也许这也需要重新措辞。 – 2014-11-04 11:04:14
- 1. 网络堆栈崩溃?
- 2. 崩溃后“不可能”堆栈跟踪的内容是什么?
- 3. 在Swift崩溃的情况下转储堆栈和异常
- 4. 阅读iOS Webkit崩溃堆栈跟踪
- 5. Symbolicate iOS崩溃堆栈跟踪无崩溃日志
- 6. VS2010,MFCEditBrowseControl堆崩溃
- 7. 堆栈实现崩溃时,试图打印堆栈的元素
- 8. Firebase崩溃堆栈中的'<OR>'是什么?
- 9. 发生崩溃时查看堆栈
- 10. UINavigationController的崩溃推3次入堆栈
- 11. 本地堆栈跟踪崩溃
- 12. 登录调用堆栈上崩溃
- 13. 为什么Program.Main不会出现在崩溃堆栈
- 14. 铸造为const char *为char *崩溃
- 15. iOS崩溃堆栈跟踪没什么意义
- 16. 在崩溃转储中获取堆栈的时间戳
- 17. M2Eclipse崩溃Eclipse:java堆空间
- 18. Android - 崩溃发生,但堆栈跟踪没有说明它发生在哪里
- 19. 堆内存分配崩溃与std :: wstring
- 20. 无效的崩溃堆栈跟踪或小型转储
- 21. 在Android Studio中未显示日志和崩溃堆栈跟踪
- 22. 我在哪里可以找到Windows崩溃转储(蓝屏崩溃转储)?
- 23. 虽然循环导致堆栈转储和程序崩溃在C++
- 24. boost在堆上创建unique_lock而不是堆栈导致mingw崩溃
- 25. 等待控制台输入时调用堆栈崩溃了吗?
- 26. 崩溃 - 从哪里开始?
- 27. 从Android获取崩溃堆栈跟踪的最简单方法是什么?
- 28. 什么是这个晦涩的崩溃报告(堆栈跟踪)说?
- 29. ios崩溃堆栈跟踪中右侧的数字是什么意思?
- 30. Internet Explorer 8在哪里存储其崩溃转储?
你已经清楚地分开你的问题分为四个不同的问题。应该单独询问这些问题,单击每个问题的[“Ask Question”](http://stackoverflow.com/questions/ask)按钮。请这样做,这样我们可以分别回答每个问题:) – 2014-11-04 10:51:43
这可能会回答你的问题的一部分http://www.geeksforgeeks.org/memory-layout-of-c-program/ – amudhan3093 2014-11-04 11:27:32