簡體   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