我正在调整方法内部数组的大小,但是由于我使用的是指针,因此内存地址现在不正确。 diffDataTot
指针最初是在main()
中创建的,然后传递到calculateField()
方法中。 calculateField()
方法包含需要添加到diffDataTot
的新信息,并且需要删除一些旧信息。我使用resize()
方法调用对此进行了说明。
void calculateField(diffData* diffDataTot){
diffData* filler = (diffData*)malloc(newSize * sizeof(diffData));
filler = resize(newSize, diffDataTot);
free(diffDataTot);
diffDataTot = filler;
free(filler);
}
int main{
diffData* diffDataTot = (diffData*)malloc(sizeof(diffData));
calculateField(diffDataTot);
}
我不得不缩写它,因为它来自数千行的全面模拟。但是,问题在于diffDataTot
在calculateField()
方法内部包含正确的信息。但是指针指向的内存地址不同于main()
中的地址。我可以尝试不使用指针,但是我想避免每次调用calculateField()
时复制整个数组,因为它很大。
我有什么办法可以通过calculateField()
方法传回数组中第一个元素的内存?
答案 0 :(得分:2)
您需要传递指针的地址(指针指向指针)。
void
resizing_func(int **elements,
int *elem_count)
{
//---- get rid of additional indirection ----
int *p=*elements;
int count=*elem_count;
//---- work with local variables ----
// ...
int new_count=2*count; // whatever is needed for the problem
p=realloc(p, new_count*sizeof(int));
// ...
//---- make changes visible in calling context ----
*elements=p;
*elem_count=new_count;
}
void
testing_func(void)
{
int count=100;
int *elements=malloc(count*sizeof(int));
// populate elements
resizing_func(&elements, &count);
// use updated elements and count
}
根据问题,realloc()
可以替换为:
如OP的问题。
(顺便提一下,free(filler)
将释放打算保留在diffDataTot
中的内容)
注意:由于该问题被标记为c++
,因此最好使用std::vector
并通过(非const)引用传递它;但是提供的源代码看起来像c
。