簡體   English   中英

C ++將對數組的引用傳遞給C函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM