当我在函数调用(regressionFunction
)检查(使用gdb)双指针的值时,它是正确的(即100.00),但在dExpectedValue
内,这个传递元素的值变成垃圾。那就是dExpectedValue
变成了垃圾。
为什么我在regressiveFunction
函数中获取int regressionFunction(double dValue, double dExpectedValue){
if (fabs(dValue - dExpectedValue)<0.0000001)
return 1;
else
return 0;
}
int main(){
int nError;
double dReferenceValue = 100.00;
double **p2dExpectedValue;
// malloc double pointer
p2dExpectedValue[0][0] = 100.00;
nError = regressionFunction(dReferenceValue,p2dExpectedValue[0][0]);
}
的垃圾值?
$sXML = file_get_contents('xxxxxx');
$oXML = new SimpleXMLElement($sXML);
echo $oXML->Error->Result->ResponseCode;
答案 0 :(得分:0)
正如评论所说,你从来没有为双指针分配任何内存。当您进入该函数时,本地堆栈可能会覆盖它所指向的内容。当你实际上malloc一些内存时,它将来自堆,没有任何东西会覆盖它。
如果你打算创建一个2D数组,有几种方法可以解决它。这是一个很好的参考:https://www.geeksforgeeks.org/dynamically-allocate-2d-array-c/
这可行,在1x1数组上进行指针数学运算可能看起来很愚蠢,但我在这个例子中是为了完整性而做的。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int regressionFunction(double dValue, double dExpectedValue){
if (fabs(dValue - dExpectedValue)<0.0000001)
return 1;
else
return 0;
}
int main(){
int nError;
int x=1,y=1; // Array dimensions
double dReferenceValue = 100.00;
double *p2dExpectedValue = (double*)malloc(x * y * sizeof(double));
// Set [0][0] to 100.00 / pointer math does nothing,
// but on an actual 2D array needed to access the correct cell.
*(p2dExpectedValue + 0*x + 0) = 100.00;
nError = regressionFunction(dReferenceValue,*(p2dExpectedValue + 0*x + 0));
}
答案 1 :(得分:-1)
您正在使用未初始化的内存。您需要先获取要使用的内存块:
p2dExpectedValue[0][0] = 100.00;
那时,p2dExpectedValue不是一个有效的指针,它有一个随机值,指向一个你不允许使用的随机位置。
您可以在堆栈或堆中初始化。
堆叠:
double p2dExpectedValue[1][1];
p2dExpectedValue[0][0] = 100.00;
在堆上:
double **p2dExpectedValue = malloc(1 * 1 * sizeof(double));
p2dExpectedValue[0][0] = 100.00;
在这些示例中,数组每个只有1个元素。很可能你想要更多的元素。