【发布时间】:2021-06-27 23:15:52
【问题描述】:
我正在使用动态数组,请考虑两种情况 - 场景一:
typedef struct
{
int *array;
int dataPtr;
} A;
static A dynaArray;
//Call the function as
dynaAdd(&dynaArray, <pointer to data block>, <length> );
static bool dynaAdd(A *data, int *dataCopy, int len)
{
int newlen = (data->dataPtr + len);
data->array = (int *) realloc(data->array, newlen * sizeof(int));
if (!data->array)
{
return FALSE;
}
memcpy(&data->array[data->dataPtr], dataCopy, len* sizeof(int));
data->dataPtr += len; // update data ptr
return TRUE;
}
我创建了一个static struct A data(比如说)并作为指针传递给一个函数,该指针每次都为A->array重新分配长度并向其中添加数据,维护一个dataPtr作为索引。这工作得很好,我可以创建一个长度为 100 的 A-> 数组,使用数据并释放指针和空值。
在另一个场景 2 -
static int *dynArray;
//Call the function as
dynaAdd(dynaArray, <pointer to data block>, <len>, <dataIdx> );
static bool dynaAdd(int *data, int *dataCopy, int len, int dataIdx)
{
int newlen = (dataIdx + len);
data = (int *) realloc(data, newlen * sizeof(int));
if (!data)
{
return FALSE;
}
memcpy(&data[dataIdx], dataCopy, len* sizeof(int));
dataIdx += len ;
return TRUE;
}
我只是使用int *array 而不是struct,维护一个static int dataPtr(say) 来跟踪下一个索引,将数组指针传递给函数并动态增长数组并向其中添加内容。但是,程序在创建一些 x 长度数组(不断变化)后崩溃。
有人可以帮助理解这两种方法之间的区别吗?在这两种情况下,目标都是创建一个动态数组并不断向其中添加内容,直到某个数据索引,然后释放该数组。
谢谢。
【问题讨论】:
-
为了知道您可能做错了什么,我们需要查看您的代码。
-
编辑问题以添加更多详细信息