[英]C++ passing reference to array to C function
我试图调用用C编写的函数,该函数将指针传递给数组。
在C ++中,我具有以下内容:
double* x = new double[10];
populateArray(x);
在C中:
void populateArray(double* vars);
{
vars = (double*) malloc(10*sizeof(double));
int i;
for(i = 0; (i < 10); i++)
{
vars[i] = 1*20;
}
}
但是,当我尝试在C ++代码中输出x
的内容时,结果始终为0?
出现问题是因为您正在更改局部变量vars
。
改成:
double* x; //you don't need to allocate here if you are allocating later
populateArray(&x);
和:
void populateArray(double** vars)
{
*vars = malloc(10*sizeof(double)); //also no need to cast malloc
int i;
for(i = 0; (i < 10); i++)
{
(*vars)[i] = 1*20;
}
}
void populateArray(double* vars);
{
vars = (double*) malloc(10*sizeof(double)); // <---- remove this line completely
问题是您忽略了给定的vars
,并为其创建了一个全新的缓冲区。
更糟糕的是,此函数返回时,缓冲区指针丢失,从而导致内存泄漏。
只需使用您获得的vars
请删除上面指示的行。
简短答案:删除函数内部的malloc
调用。
答案略长:
您正在将vals
指针的值更改为另一个新分配的内存-因此,您传入的参数将变为未使用的(因此永远不会填充)。
结果始终为0是一个巧合,它可以是任何东西(或者您可能会患上鼻恶魔 ),因为您随后将读取未初始化的内存,这是未定义的行为。
如果您删除呼叫,则如下所示:
vals = new double[10];
vals = malloc(10 * sizeof(double));
第一个值将被覆盖。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.