我是C++的新手,我正在研究'压缩感应',所以我需要处理大型矩阵,而MATLAB实际上很慢,所以我用C++编写算法.
问题是我存储大数组(大约100Mb-1Gb).它们大约是20个阵列.它可以正常使用30 Gb的内存,但是当进程需要超过40Gb时,它就会停止.我认为这是一个内存问题,我在Linux和Windows上测试它(OS 64位 - 编译器64位MinGW - 200Gb Ram - intel Xeon)有任何限制吗?
size_t tm=n*m*l;
double *x=new double[tm];
Run Code Online (Sandbox Code Playgroud)
我使用大约20个像这样的阵列.n,m~ = 1000且L~ = 30这些通常是尺寸.
谢谢
如果我std::vector使用默认构造函数(和默认分配器)构造一个空,它可以抛出异常吗?
通常,为容器的元素分配空间可以抛出异常(这将是一个异常std::bad_alloc).但一个默认的构造函数std::vector并不需要分配任何这样的空间.它可以在第一次插入或赋值时懒惰地分配一些空间.但是C++标准是否要求它不会抛出异常(暗示延迟分配,或者捕获std::bad_alloc然后再回到延迟分配)?
我需要用new分配大块内存.
我坚持使用new,因为我正在为两部分应用程序的生产者端编写一个模拟器.实际的生产者代码正在分配这些大块,我的代码有责任删除它们(在处理它们之后).
有没有办法可以确保我的应用程序能够从堆中分配如此大量的内存?我可以将堆设置为更大的尺寸吗?
我的情况是64块288000字节.有时我得到12分配,有时我得到27分配.我得到一个std :: bad_alloc异常.
这是:C++,Linux上的GCC(32位).
我试图开始使用node.js主要用于学习目的,但我肯定会看到我将在未来的项目中使用的一些潜力.
我的问题 - 我在Centos服务器上使用SSH并完成了本教程:https://www.digitalocean.com/community/articles/how-to-install-and-run-a-node-js-app -酮的CentOS-6-4-64bit
在"创建快速应用程序"部分之前,一切都很顺利.当我在命令行上键入"express hello"时,出现此错误:
terminate called after throwing an instance of 'St9bad_alloc'
what(): std::bad_alloc
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)
然后目录中会有一个文件(例如:core.1233),似乎有行话 - 但以前肯定不存在.
我也去了http://nodejs.org网站,试图用那里的代码创建简单的Web服务器.我创建了example.js文件,当我输入"node example.js"时,我也得到:
terminate called after throwing an instance of 'St9bad_alloc'
what(): std::bad_alloc
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)
......和以前一样
我是一名程序员(通常是PHP,MySQL等),在服务器或命令行上没有多少工作 - 但我可以"充分利用".问题是 - 除了快速谷歌搜索告诉我的内容之外,我不知道这意味着什么 - 与记忆有关?任何帮助都非常感谢!
(另外,当我键入"node --version"时,我确实得到版本v0.10.8,所以我非常确定节点是否正确安装.如果我创建example.js文件只能说"console.log('test') ;",它仍然终止并给出相同的错误.它永远不会输出."
谢谢!
对于一个学校项目,我有3个班:一个鸡蛋,一个巢和一个母鸡.我们需要使用new创建每个in的实例,对每个实例进行main调用display(),然后显式删除每个实例.这一切都很简单.
我的问题是不知道如何正确地抓住一个bad_alloc; 应该抛出任何一个new电话.
现在,它看起来像这样:
int main(int argc, char* argv[]) {
using namespace std;
cout << "Creating new instances on the heap..." << endl;
Egg* egg = new Egg("New Egg");
Nest* nest = new Nest("New Nest");
Hen* hen = new Hen("New Hen");
cout << sizeof(*egg) << endl;
cout << sizeof(*nest) << endl;
cout << sizeof(*hen) << endl;
cout << "\nCalling display() on each..." << endl;
egg->display();
nest->display();
hen->display();
cout << "\nExplicitly …Run Code Online (Sandbox Code Playgroud) 我面临着std :: map的问题。出于未知原因,有时插入映射会导致“分配错误”异常。
以下是我用于插入地图的函数。
BOOL Add2WaitList(Object<LPVOID> *newObj)
{
try
{
_set_se_translator( trans_func );
m_syncWQ.Lock();
if (m_waitingQueue.count(newObj->uid)>0)
{
m_syncWQ.Unlock();
return FALSE;
}
m_waitingQueue[newObj->uid] = *newObj; <-- failing here
m_syncWQ.Unlock();
return TRUE;
}
catch(std::exception &ex){
...
}
catch(SE_Exception &e){
...
}
catch(...){
...
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何解决吗?
注意:我无法确定重现它的步骤。
提前THX!
添加有关对象和地图的详细信息:
template <typename T>
struct Object{
public:
void Kill()
{
if (response!=NULL)
delete response;
if (object!=NULL)
delete object;
}
enum objType;
std::string uid;
enum status;
double p;
enum execType;
T object;
LPVOID response;
}; …Run Code Online (Sandbox Code Playgroud) 我在 C++ dll 中有以下代码,通过 JNI 调用它:
std::vector<double> myVector;
myVector.resize(10000000, 0);
Run Code Online (Sandbox Code Playgroud)
我收到“错误分配”异常,即使向量的最大大小据称大于 10000000。
我应该使用什么工具来跟踪内存分配,以便找到任何内存泄漏?
如果确实没有内存泄漏,我如何减少向量的占用空间以确保我有足够的空间?
如果没有(因为标题中定义了这个错误),new程序中的表达式如何抛出错误是怎么回事?bad_alloc#include <new><new>
从3.7.4开始.N3337:
该库提供全局分配和释放功能的默认定义.一些全局分配和释放功能是可替换的(18.6.1).C++程序最多只能提供一个可替换分配或释放功能的定义.任何此类函数定义都将替换库中提供的默认版本(17.6.4.6).以下分配和释放函数(18.6)在程序的每个转换单元中在全局范围中隐式声明.
Run Code Online (Sandbox Code Playgroud)void* operator new(std::size_t); void* operator new[](std::size_t); void operator delete(void*); void operator delete[](void*);这些隐含的声明只介绍了函数名
operator new,operator new[],operator delete,和operator delete[].[ 注:隐式声明不引入名称std,std::size_t或该库使用来声明这些名称的任何其他名称.因此,在不包括头部的情况下引用这些函数之一的新表达式,删除表达式或函数调用<new>是格式良好的.但是,除非通过包含适当的标题声明了名称,否则引用std或std::size_t形成不良.-end note ]也可以为任何类声明和定义分配和/或释放函数
这仍然不清楚.隐式声明使用std::size_t但不引入它们(同样必须是这样bad_alloc)?并且std::size_t在new表达式可以使用之前不需要引入?可以理解这是怎么回事,或者我必须从表面上看它?
我正在使用 aViewPager来显示片段。当我多次滑动它时,它会出现以下错误:
E/libc++abi: terminating with uncaught exception of type std::bad_alloc: std::bad_alloc
--------- beginning of crash
A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 6900
Run Code Online (Sandbox Code Playgroud)
我正在显示和缓存图像(使用这个)以及我正在使用TextView用来在Fragment.
我试图从其他链接获得帮助,但未能成功。
我有1,2,...,n个向量。每个向量都有超过10000个元素,我必须获得这些向量的笛卡尔积。我有一个代码,起作用了,但是仅在1000个元素和4个向量以下。我想将笛卡尔乘积写到文件中,但是如果输出文件大于1GB,则会得到:“在抛出'std :: bad_alloc'what()实例what():std :: bad_alloc实例后调用终止”。
我的主要问题是,如何解决此内存分配错误?
这是我的代码的可运行部分:
#include <iostream>
#include <vector>
#include <algorithm>
#include <time.h>
#include <fstream>
#include <math.h>
using namespace std;
vector<double> makeVectorByRange(double min, double max, double step){
vector<double> out = {};
for( ; min <= max; min+=step){
out.push_back(min);
}
return out;
}
void cart_product_solve_and_write_to_file (const vector<vector<double>>& inpV) {
vector<vector<double>> out = {{}};
std::ofstream outputFile;
std::fixed;
for (auto& u : inpV) {
vector<vector<double>> r;
r.clear();
for (auto& x : out) {
//make/open file, append
outputFile.open ("out.csv", std::ofstream::out | std::ofstream::app); …Run Code Online (Sandbox Code Playgroud)