[英]how to allocate memory for unknown size struct array in C
我正在尝试在C中读取一个大的ticks文件,并将其保存为每秒的结构。 每秒钟,我将在此结构中使用不同的代码。 但是,如果在一秒钟内我们看到太多的代码,我的代码就会崩溃。
例如,
在第二个1中,它只有10个股票。 在第二个1000中,它是10000。
我的代码将为每秒分配相同的内存大小,因此它浪费太多的内存来占用安静的时间,但不足以占用繁忙的时间。
请在下面找到我的添加结构代码,
long int addTickArray(long int TickTime, int maximumOrderSize, struct TickArray*TickArray, long int TickPos) {
int i;
for (i = TickPos; i < maximumOrderSize; i++) {
if (TickArray[i].TickTime == NULL) {
break;
} else if (TickArray[i].TickTime == TickTime) {
return i;
}
}
struct TickArray newTickArray;
newTickArray.Ticker = malloc(4000 * sizeof (char*) *10);
newTickArray.askprice = malloc(4000 * sizeof (float*));
newTickArray.bidprice = malloc(4000 * sizeof (float*));
newTickArray.TickTime = TickTime;
newTickArray.TickTimePos = 0;
TickArray[i] = newTickArray;
return(i);
}
我不确定是否有任何智能方法可以为结构分配灵活的内存。
当初始块已满时,使用realloc
分配更多的内存。
struct TickArray {
size_t maxSize;
size_t currSize;
// Declaration of ticker, askprice, bidprice
};
当currSize
达到maxSize
:
maxSize = maxSize * 2;
tickData.ticker = realloc(tickData.tickarray, maxSize * ...
我相信您的代码中存在一个设计问题:出于某种原因,您读取了数据(问题中未包含的代码)并在两个不同的函数中为该数据分配了内存( addTickArray
函数)。 这导致资源浪费并引入其他故障条件。
您应该做的是创建一个单一的函数,该函数同时执行两个操作-读取文件并为新数据分配内存。 例如,您可以将新的滴答声暂时读入足够大的数组以应对最坏的情况,检查数据的实际大小并分配一个确切需要大小的新TickArray
元素。
您可以创建并使用列表结构来解决您的问题。 列表结构允许您每次添加新元素时分配一个元素。
或者,您可以使用双重调整大小机制来调整阵列大小。 您必须使用两个变量:一个用于存储当前大小,一个用于存储数组的最大大小。 当当前大小大于最大大小时,您可以使用“ realloc”函数以新大小重新分配当前最大大小的两倍的数组
例如:
if (currentSize+1 > maxSize)
{
maxSize *= 2;
T* newArray = (T*) realloc (currentArray, maxSize * sizeof(T));
}
currentArray[currentSize++] = newElement;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.