【发布时间】:2011-03-17 05:25:06
【问题描述】:
这有什么区别:
somefunction() {
...
char *output;
output = (char *) malloc((len * 2) + 1);
...
}
还有这个:
somefunction() {
...
char output[(len * 2) + 1];
...
}
什么时候比另一个更合适?
感谢大家的回答。这是一个总结:
- 例如。 1是堆分配
- 例如。 2是栈分配
- 堆栈有大小限制,将其用于较小的分配
- 你必须释放堆分配,否则会泄漏
- 一旦函数退出就无法访问堆栈分配
- 在您释放它(或应用程序结束)之前,可以访问堆分配
- VLA 不是标准 C++ 的一部分
欢迎指正。
这里是堆与栈之间区别的一些解释:
What and where are the stack and heap?
【问题讨论】:
-
您应该查阅您的 C++ 书籍。如果您没有 C++ 书籍,我建议您获取 The Complete C++ Book Guide and List 中列出的初学者文本之一。
-
另外,这个问题完全取决于
len是如何定义的;如果它不是一个常量,那么第二个代码示例是格式错误的 C++。 -
len 是一个 int 并赋值给函数内部 strlen 的结果。
-
我不理解人们对“买书”的反应。不是每一个问题都由某本书回答吗?除非您的意思是这个问题由大量书籍回答,在这种情况下,“基本”问题在伟大的 stackoverflow 中是不可接受的吗?我不是指像 James McNellis 这样的特定书籍的指针,只是像 Brian R. Bondy 这样的一般书籍的指针。如何过滤掉标记为基本问题的搜索?还是)感谢你的建议。你怎么拼写C?
-
@Gush:我建议参考一本好书是一个严肃的建议。仅仅通过在互联网上提问是无法学习一门语言的,尤其是像 C++ 这样复杂的语言。任何关于 C 或 C++ 的介绍性文本都会很早就涵盖此类主题,因为对象存储持续时间是该语言的基本部分。微不足道的基本问题虽然在 SO 上是允许的,但令人不安,因为它们通常表明提问者可能正在从一个糟糕的来源学习语言(我并不是说你一定是这种情况,只是经常是这种情况)。