RCPP代码崩溃
Rcpp code crashes R
我有以下C 代码:
NumericVector testFromontcpp(NumericMatrix z1, NumericMatrix z2, int Nbootstrap){
int dim1 = z1.nrow();
int dim2 = z2.nrow();
int dimension = z1.ncol();
int N = dim1 + dim2;
NumericVector TKeps(Nbootstrap+1);
cout << "toto";
double bb[N][N];
cout << "toto";
return(TKeps);
}
我使用RCPP软件包运行它:sourceCpp("...")
。如果z1.size()
不到500。
我想知道:
- 我在这里做错了吗?
- 还是RCPP中的大小问题?
- 是否有解决方案可以使我的代码使用
z1.size()
> 0?
谢谢!
它甚至比马修(Matthew)说
更糟糕 double bb[N][N];
只是错误,因为C/C 没有天然的二维结构。您始终创建一个长向量,然后使用巧妙的索引,请参见例如C代码中用于模拟矩阵的旧数值配方。
在这里,这很愚蠢,因为我们 do 具有矩阵类型,因此请使用一个:
Rcpp::NumericMatrix bb(N,N);
较大的ISUE是,使用现代C 以及RCPP提供的类,您应该从不使用malloc
/free
或new
/delete
。
尽管其他人所说的话,多维数组是完全有效的。但是,在运行时指定尺寸仅在C99中支持。编译器选择尊重这一点,但这不是标准。这是我使用clang和-pedantic
选项得到的:
array.cpp:13:15: warning: variable length arrays are a C99 feature [-Wvla-extension]
double bb[N][N];
^
array.cpp:13:12: warning: variable length arrays are a C99 feature [-Wvla-extension]
double bb[N][N];
^
另请参阅此问题。
您的问题在此行中:
double bb[N][N];
正在分配堆栈上的大量元素,并且您的堆栈空间不足。而是在堆上分配。
如果可能的话,我将使用std::vector<std::vector<double>>
。那是将其内存分配在堆上的资源处理。您没有指示您对bb
做什么,所以我无法判断是否可能。
相关:https://stackoverflow.com/a/16411448/1290634
相关文章:
- 为什么所有C++编译器都会崩溃或挂起此代码
- 使用 g++7 构建的代码在访问未对齐的内存时崩溃
- 您好,我实际上想了解以下代码.有人可以详细说明代码它到底在做什么吗?为什么它会在第 31 行崩溃
- 无法访问的代码如何导致我的程序崩溃?
- C++代码崩溃并具有无限循环
- 由于指针算法错误,代码在 memcpy 中崩溃
- 为什么在同一条件变量上使用多个互斥锁会使此代码崩溃?
- 运行简单的.oct文件时Octave崩溃,我的代码出了什么问题?
- 为什么代码会崩溃?(在CPP中)
- 赋值运算符在我制作类模板时使代码崩溃
- 为什么抓取窗口标题的代码会导致应用崩溃?
- 类似的代码.一个工作,一个崩溃.为什么?
- 为什么这段代码崩溃了
- 为什么此代码在此 Trie 实现中使用映射 c++ 中的指针崩溃?
- 为什么此代码会崩溃?(我是C 的新手)
- 程序过早结束,可能已经崩溃了.退出代码0xc0000005
- C++ - 代码在Visual Studio中完美运行,但命令行中的.exe不断崩溃
- 如何在导致应用程序崩溃的代码中修复指令
- 运行时,程序崩溃(代码块C++)
- 是我的编译器将适当的代码优化为无用的崩溃代码