我在使用std :: list <std :: string>时偶然发现Stack Overflow问题内存泄漏与std :: string,其中一条评论说:
停止使用
new这么多.我看不出你在任何地方使用新的任何理由.您可以使用C++中的值创建对象,这是使用该语言的巨大优势之一.您不必在堆上分配所有内容.不要像Java程序员那样思考.
我不太确定他的意思是什么.为什么要尽可能经常地用C++中的值创建对象,它在内部有什么区别?我误解了答案吗?
以下代码为我生成堆栈溢出错误
int main(int argc, char* argv[])
{
int sieve[2000000];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?我正在使用Turbo C++,但我想将我的代码保存在C中
编辑:
感谢您的建议.上面的代码只是例如,我实际上在函数中声明了数组而不是在sub main中.此外,我需要将数组初始化为零,所以当我使用Google搜索时,我发现calloc非常适合我的目的.
Malloc/calloc还具有优于堆栈分配的优势,允许我使用变量声明大小.
您可能认为这是一个巧合,我的问题的主题类似于论坛的名称,但我实际上通过谷歌搜索"堆栈溢出"一词来到这里.
我使用OPNET网络模拟器,我使用C编程.我认为我遇到了大数组大小的问题.看来我正在达到某种内存分配限制.它可能与OPNET,Windows,我的笔记本电脑内存或最有可能的C语言有关.当我尝试使用具有数千个整数的元素总数的嵌套数组时,会导致该问题.我认为我超出了整体内存分配限制,我想知道是否有办法增加这个上限.这是确切的问题描述:
我基本上有一个路由表.我们称之为routing_tbl [n],这意味着我支持30个节点(路由器).现在,对于此表中的每个节点,我保留信息.大约有很多(数百个)可用路径,在一个名为paths [p]的数组中.同样,对于此数组中的每个路径,我将属于它的节点列表保存在名为hops [h]的数组中.所以,我至少使用了nph整数值的内存,但是这个表也包含其他信息.在同一个函数中,我也使用另一个嵌套数组,它也消耗了近40,000个整数.一旦我运行我的模拟,它就会退出抱怨堆栈溢出.当我减少路由表的总大小时,它可以工作.您认为导致问题的原因是什么?如何解决?非常感谢阿里
我尝试编写此类:
public class ModelManager
{
public OmniacareHomeProductionEntities _db;
public CategoriaManager categoriaManager
{
get { return categoriaManager; }
set
{
if (categoriaManager == null)
{
categoriaManager = new CategoriaManagerImpl();
}
}
}
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(ModelManager));
public ModelManager()
{
_db = new OmniacareHomeProductionEntities();
}
}
Run Code Online (Sandbox Code Playgroud)
CategoriaManager是一个接口,CategoriaManagerImpl是一个实现CategoriaManager的类。
我在这种模式下使用ModelManager类:
ModelManager modelManager = new ModelManager();
modelManager.categoriaManager.saveLocalCategory(category, true);
Run Code Online (Sandbox Code Playgroud)
因此,当我尝试运行此代码时,此行有一个StackOverflowError
get
{
return categoriaManager;
}
Run Code Online (Sandbox Code Playgroud)
我的错误在哪里?你能帮助我吗?