Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;将对数组的引用传递给C函数_C++_C_Arrays_Pointers - Fatal编程技术网

C++ C++;将对数组的引用传递给C函数

C++ C++;将对数组的引用传递给C函数,c++,c,arrays,pointers,C++,C,Arrays,Pointers,我试图调用一个用C编写的函数,该函数传入一个指向数组的指针 在C++中,我有以下的内容: double* x = new double[10]; populateArray(x); 在C中: void populateArray(双*vars); { vars=(双*)malloc(10*sizeof(双)); int i; 对于(i=0;(i 无效的Puto AtAR(双*VARS); void populateArray(double* vars); { vars = (dou

我试图调用一个用C编写的函数,该函数传入一个指向数组的指针

在C++中,我有以下的内容:

double* x = new double[10];

populateArray(x);
在C中:

void populateArray(双*vars);
{
vars=(双*)malloc(10*sizeof(双));
int i;
对于(i=0;(i<10);i++)
{
变量[i]=1*20;
}
}
<>但是,当我尝试在C++代码中输出<代码> x <代码>的内容时,结果总是为0?< /p> <代码>无效的Puto AtAR(双*VARS);
void populateArray(double* vars); 
{
    vars = (double*) malloc(10*sizeof(double)); // <---- remove this line completely
{ vars=(双*)malloc(10*sizeof(双));//
void populateArray(双*vars);
{

vars=(double*)malloc(10*sizeof(double));//简短回答:删除函数内部的
malloc
调用

稍长一点的回答:

您正在更改指向另一个新分配内存的
vals
指针的值——因此,传入的参数未使用(因此永远不会填充)

结果总是0是一种巧合,它可能是任何东西(或者你可能最终得到),因为你正在读取未初始化的内存,这是一种未定义的行为

如果您取消呼叫,请将其更改为:

vals = new double[10];
vals = malloc(10 * sizeof(double));

第一个值被覆盖。

简短回答:删除函数中的
malloc
调用

稍长一点的回答:

您正在更改指向另一个新分配内存的
vals
指针的值——因此,传入的参数未使用(因此永远不会填充)

结果总是0是一种巧合,它可能是任何东西(或者你可能最终得到),因为你正在读取未初始化的内存,这是一种未定义的行为

如果您取消呼叫,请将其更改为:

vals = new double[10];
vals = malloc(10 * sizeof(double));

第一个值被覆盖。

问题的出现是因为您正在更改局部变量
vars

改为:

double* x; //you don't need to allocate here if you are allocating later

populateArray(&x);
以及:

void populateArray(双**vars)
{
*vars=malloc(10*sizeof(double));//也不需要强制转换malloc
int i;
对于(i=0;(i<10);i++)
{
(*变量)[i]=1*20;
}
}

问题的出现是因为您正在更改局部变量
vars

改为:

double* x; //you don't need to allocate here if you are allocating later

populateArray(&x);
以及:

void populateArray(双**vars)
{
*vars=malloc(10*sizeof(double));//也不需要强制转换malloc
int i;
对于(i=0;(i<10);i++)
{
(*变量)[i]=1*20;
}
}

调用时无需使用
new
。无需为函数副本分配内存(更不用说不释放它了)当克里斯不使用<代码> < <代码> >时,我会得到一个分段错误。那么,你可能做的不对。这个函数对你所传递的内容没有任何作用。注意,这里没有传递一个引用,而是一个指针。这是很重要的,因为C没有通过引用,但是C++确实如此。调用时无需使用
new
。无需为函数副本分配内存(更不用说不释放它了)当克里斯不使用<代码> < <代码> >时,我会得到一个分段错误。那么,你可能做的不对。这个函数对你所传递的内容没有任何作用。注意,这里没有传递一个引用,而是一个指针。这是很重要的,因为C没有通过引用,但是C++确实如此。请注意,此处的内存分配与其他答案中的内存分配不同。此答案中的函数获取不指向任何内容的指针的地址,并使其指向新的初始化数组。我的答案和其他答案中的函数获取已指向数组的指针,并初始化该空间中的值。或者方法可以解决您的问题,但能够区分这两种方法很好。请注意,此处的内存分配与其他答案中的内存分配方式不同。此答案中的函数获取指向零的指针的地址,并使其指向一个新的初始化数组。my和其他答案中的函数获取一个点呃,已经指向一个数组,并初始化该空间中的值。任何一种方法都可以解决您的问题,但是能够区分这两种方法是很好的。