繁体   English   中英

C程序内存违反依赖于std :: cout(?)

[英]C program memory violation dependant on std::cout (?)

我已经用Python编写了C ++扩展,我正在调试它。 扩展需要3个numpy矩阵,结果产生2个。 对于执行实际计算的内部C ++函数,我传递了3个float C数组(刚刚平坦化并从输入numpy数组转换),并返回一个C float数组。 一切都按预期工作,但只有在我返回它之前打印这个数组的输出数组。

这到底是怎么回事?

float** gradient(float* inputs, float* kernels, float* grads, npy_intp* input_dims, npy_intp* kernels_dims, npy_intp* output_dims){


float* g_inputs = new float[batch*h*w*ch_in];
for (int i = 0; i < batch*h*w*ch_in; i++) g_inputs[i] = 0;
float* g_kernels = new float[size*ch_out];
for (int i = 0; i < size*ch_out; i++) g_kernels[i] = 0;


float* ret[2] = {{g_inputs}, {g_kernels}};
std::cout<<ret<<std::endl; //<---without this it doesn't work
return ret;
}

为清楚起见,我省略了不相关的代码。

您正在返回一个指向具有自动生命周期的对象的指针。 换句话说,您的函数返回一个悬空指针,即未定义行为。

虽然空气静力蜥蜴是UB不常见的结果,但是任何事情都可能发生,而且与蜥蜴不同,你观察到的症状很常见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM