[英]C++ passing reference to array to C function
我試圖調用用C編寫的函數,該函數將指針傳遞給數組。
在C ++中,我具有以下內容:
double* x = new double[10];
populateArray(x);
在C中:
void populateArray(double* vars);
{
vars = (double*) malloc(10*sizeof(double));
int i;
for(i = 0; (i < 10); i++)
{
vars[i] = 1*20;
}
}
但是,當我嘗試在C ++代碼中輸出x
的內容時,結果始終為0?
出現問題是因為您正在更改局部變量vars
。
改成:
double* x; //you don't need to allocate here if you are allocating later
populateArray(&x);
和:
void populateArray(double** vars)
{
*vars = malloc(10*sizeof(double)); //also no need to cast malloc
int i;
for(i = 0; (i < 10); i++)
{
(*vars)[i] = 1*20;
}
}
void populateArray(double* vars);
{
vars = (double*) malloc(10*sizeof(double)); // <---- remove this line completely
問題是您忽略了給定的vars
,並為其創建了一個全新的緩沖區。
更糟糕的是,此函數返回時,緩沖區指針丟失,從而導致內存泄漏。
只需使用您獲得的vars
請刪除上面指示的行。
簡短答案:刪除函數內部的malloc
調用。
答案略長:
您正在將vals
指針的值更改為另一個新分配的內存-因此,您傳入的參數將變為未使用的(因此永遠不會填充)。
結果始終為0是一個巧合,它可以是任何東西(或者您可能會患上鼻惡魔 ),因為您隨后將讀取未初始化的內存,這是未定義的行為。
如果您刪除呼叫,則如下所示:
vals = new double[10];
vals = malloc(10 * sizeof(double));
第一個值將被覆蓋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.