我正在用 C 语言编写一个函数,该函数需要在执行过程中修改多个变量,特别是最后 3 个参数。函数声明如下所示:
void Sample_v2(double cyl_radius, double thetaOx, double binsize, double ** newRx, double * binCenterThetas, double ** binCenters)
我的变量如下:
int main() {
// initialize function outputs
double ** GPU_binCenters;
double ** GPU_Rx;
double * GPU_binCenterThetas;
// set testing values
double cyl_rad = 0.3;
double theta = 1.5708;
double binsiz = 0.0025;
int n;
Sample_v2(cyl_rad, theta, binsiz, GPU_Rx, GPU_binCenterThetas, GPU_binCenters);
fprintf(stdout,"GPU_binCenters\n");
for (n = 0; n < 188; n++) {
fprintf(stdout, "%G\n", GPU_binCenterThetas[n]);
}
}
我用以下代码给我的数组值:
newRx = (double**) calloc((int)ceil(howmany) * 2, sizeof(double*));
for (ii = 0; ii < (int)ceil(howmany) * 2; ii++) {
newRx[ii] = (double*) calloc(2, sizeof(double));
}
或者
binCenterThetas = (double*) calloc((int)ceil(howmany)*2+1, sizeof(double));
当我尝试在 for 循环中的 fprintf 语句上运行它时,它第一次运行时会出现段错误。使用 gdb 我也无法手动读取值,但我可以看到指针地址。我认为当我传递指针时它正在被复制,但我尝试实现另一个解决方案,传递我需要通过引用修改的变量并且也有问题。代码如下:
Sample_v2(cyl_rad, theta, binsiz, &GPU_Rx, &GPU_binCenterThetas, &GPU_binCenters);
...........
void Sample_v2(double cyl_radius, double thetaOx, double binsize, double *** newRx, double ** binCenterThetas, double *** binCenters) {
...........
*newRx = (double**) malloc((int)ceil(howmany) * 2 * sizeof(double*));
for (ii = 0; ii < (int)ceil(howmany) * 2; ii++) {
*newRx[ii] = (double*) malloc(2 * sizeof(double));
}
在 for 循环中分配内存时,该代码会出现段错误。关于如何真正让我的数组在没有段错误的情况下传递或初始化的任何帮助。请注意,我没有使用 return 语句,因为我在函数中修改了 3 个数组。