【发布时间】:2014-07-25 20:26:44
【问题描述】:
在调用 C++ 中返回指针的函数时,我遇到了段错误。这里有什么问题?该函数似乎正在做它应该做的事情,但是当它需要返回时,它就会遇到问题。
#include<iostream>
double * v_scalar_prod(double a, double *b, int n)
{
double *res ;
int i;
for (i = 0; i < n; i++) {
*(res+i) = a*b[i];
std::cout << std::setprecision(10) << "res = " << *(res+i) << '\n';
}
return res;
}
int main()
{
double y[3] = {3., 5.45, 2.};
double *z = new double[3];
z = v_scalar_prod(4., y, 3);
}
输出:
$ ./program
res = 12
res = 21.8
res = 8
Segmentation fault (core dumped)
【问题讨论】:
-
res没有任何意义。你应该为它分配一些内存。 -
你应该使用
std::vector(或者类似std::valarray,这里只是va *= 4.;)。 -
你没有为 res 分配内存。
double* res只声明了指针变量。事实上,您不仅希望它指向一个有效的double,而且您甚至还需要一个数组(如果它真的是 C++,为什么不按照 cris 建议的那样使用 C++ 方式呢?)。 -
*(res+i) = a*b[i];这甚至意味着什么?(value at res + i) = a * (the pointer at b[i])? -
我很好奇我得到的反对票。我在这里违反了任何规则吗?我是新来的。这不是此类问题的论坛吗?