在API头文件中,我发现了一个奇怪的函数声明:
void API_GetParameter(API_SOMESTRUCT param[API_NUM_CONST]);
其中API_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;
但是我怀疑这段代码要对我最近收到的堆损坏错误负责,而且我不确定我的通话是否正确。
我理解带有非const数组的函数头,其参数如下所示:
void fun(int *arr); // expects a pointer to a non-const int array of arbitrary size...
param
是按值还是按引用调用的? 答案 0 :(得分: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