gpt4 book ai didi

python - C 程序内存违规依赖于 std::cout (?)

转载 作者:行者123 更新时间:2023-11-30 02:22:47 26 4
gpt4 key购买 nike

我已经用 C++ 为 Python 编写了一个扩展,目前正在调试它。该扩展采用 3 个 numpy 矩阵,结果产生 2 个。对于执行实际计算的内部 C++ 函数,我传递了 3 个浮点 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 的罕见结果,但任何事情都可能发生,并且您观察到的症状与蜥蜴不同,它很常见。

关于python - C 程序内存违规依赖于 std::cout (?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46938718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com