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