1

在 API 头文件中,我发现了一个奇怪的函数声明:

void API_GetParameter(API_SOMESTRUCT param[API_NUM_CONST]);

whereAPI_NUM_CONST是一个枚举值并且API_SOMESTRUCT是一个结构,所以我猜这param是该结构的一个数组。

因此,该函数需要一个它填充或更改的现有数据字段。我不能说 API 函数在内部做了什么。

现在,我的代码如下所示:

API_SOMESTRUCT *param = new API_SOMESTRUCT[API_NUM_CONST];
API_GetParameter(param);
// ... read out param
delete[] param;
param = NULL;

但我怀疑这段代码是造成我最近遇到的堆损坏错误的原因,我不确定我的调用是否正确。


我了解带有非常量数组的函数头,其参数如下所示:

void fun(int *arr); // expects a pointer to a non-const int array of arbitrary size...
  • 那么 API 函数声明的确切含义是什么?
  • param按值调用还是按引用调用?
  • 以及如何正确调用该函数?
4

1 回答 1

1

声明void f(int x[3]);void f(int *x); 所以,该函数需要接收一个有效的指针API_SOMESTRUCT。否则,您将无法知道它要做什么,它需要多少元素,或者它将用它们做什么。您必须阅读文档。

如果我不得不猜测,我会传入一个API_NUM_CONST元素数组,只是分配在堆栈上:

API_SOMESTRUCT param[API_NUM_CONST]
API_GetParameter(param);
// use param
于 2012-02-21T12:02:57.613 回答