簡體   English   中英

C - 為 malloc 傳遞指向 function 的指針的引用?

[英]C - pass reference to pointer to function for malloc?

我正在嘗試將指針引用(雙精度)傳遞給 function,在 function 內部,我想將 memory 分配給該指針並用它填充。 在 x64 和 x86 的 Visual Studio 中,它不會用 10 填充 memory,而是用 0 填充。 我不太明白我在這里做錯了什么。

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

void GetData(double** d) {
    
    *d = malloc(sizeof(double) * 100);
    if (*d == NULL)
        return;

    memset(*d, 10, 100 * sizeof(double));
}

int main(void) {

    double* data;

    GetData(&data);

    for (int i = 0; i < 100; i++) {
        printf("%f\n", data[i]);
    }


    return 0;
}

更改此行:

memset(*d, 10, 100 * sizeof(double));

至:

for (int i = 0; i < 100; ++i)
        (*d)[i] = 10.0;

memset逐字節填充。 因此,不是該數組的每個元素變成 10.0,而是該數組的每個元素的每個字節將變成 10。所以memset不能使用雙精度數。

我建議盡量減少副作用的使用(如修改指針參數引用的對象)並盡可能使用返回值。

memset設置字節 將雙精度數中的所有字節設置為 10 不會將雙精度值設置為10.0

double *GetData(size_t num) {
    
    double *d = malloc(sizeof(*d) * num);
    if (d)
        for(size_t index = 0; index < num; index++)
            d[index] = 10.0;
    return d;
}

int main(void) {

    double* data = GetData(100);

    for (int i = 0; d && i < 100; i++) {
        printf("%f\n", data[i]);
    }

    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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