簡體   English   中英

動態數組的C靜態指針

[英]C static pointer for dynamic array

我有一個模塊化的C程序,其中每個模塊都使用靜態全局變量來共享訪問模塊功能之間的變量,但不能共享訪問其他模塊。 現在需要一個動態分配的數組,所有模塊函數都可以訪問該數組,但是我對malloc並不熟悉。 下面是我正在嘗試做的簡化示例。 這似乎是正確的方法,但是由於找不到相似的示例(而且真實情況要復雜得多),因此我很害羞。 我是否可以像這樣維護一個靜態指針,並使用mallocfree分配來來去去的任何內存塊,但保持指向當前塊的良好指針?

static int *dataBlock = NULL;
static int dataSize = 0, dataCursor = 0;

// Init - called externally
int initData(size) {
    if (dataBlock || dataSize > 0) {
        return -1;
    }
    dataBlock = malloc(sizeof(*dataBlock) * size);
    if (!dataBlock) {
        return -1;
    }
    dataSize = size;
    dataCursor = 0;
    return 0;
}

// Push - called externally
int pushData(value) {
    if (dataCursor >= dataSize) {
        return -1;
    }
    dataBlock[dataCursor] = value;
    dataCursor++;
    return dataCursor;
}

// Free - called externally
void freeData() {
    free(dataBlock);
    dataSize = 0;
    dataCursor = 0;
    dataBlock = NULL;
}

是的,這將(幾乎)起作用。 如果使用多個線程訪問此結構,則它將失敗。

pushData中存在缺陷。 它將第一個元素放置在dataBlock [1]上。 假設大小為3:

呼叫1-設置了dataBlock [1]

2-設置了dataBlock [2]

3-dataBlock [3]設置-超出范圍。

暫無
暫無

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

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