我需要制作一个简单的程序来制作由第一个数组中的sqrt-ed元素组成的新数组。我必须在main中编写新数组的元素。我试图调试我的代码,变量x
和y
显示了很好的数字(我只是初始化它们以便我可以观察调试器的进度),但是当我尝试编写新数组的元素时,它显示了一些奇怪的数字。一些善良的灵魂可以解释我的错误吗?
void returnSqrtArrayt(int* myArray, int length, double** newArray)
{
int i;
double x, y;
double* p;
double* arraySqrt=(double*)malloc(length*sizeof(double));
for(i=0;i<length;i++)
{
x=*myArray;
*arraySqrt=sqrt(x);
y=*arraySqrt;
myArray++;
arraySqrt++;
}
*newArray=arraySqrt;
p=arraySqrt;
for(i=0;i<length;i++)
{
printf("%e\n",*p);
p++;
}
printf("\n");
}
void main()
{
int myArray[5]={4,2,16,4,81};
int length=sizeof(myArray)/sizeof(int);
int i;
double* newArray;
returnSqrtArrayt(myArray, length, &newArray);
for(i=0;i<length;i++)
{
printf("%e\n",*newArray);
newArray++;
}
}
答案 0 :(得分:2)
您所遇到的是未定义的行为,因为您所做的是:
void returnSqrtArrayt(int* myArray, int length, double** newArray)
{
...
double* arraySqrt= malloc(...); // create new array
for(i=0;i<length;i++)
{
...
arraySqrt++; // increment pointer to this array
}
*newArray=arraySqrt; // use incremented pointer
// any use of *newArray or arraySqrt here tries to access incorrect memory !
}
最好使用临时指针p
进行打印,因为递增p
不会影响原始指针,但请尝试以下更改:
*newArray=arraySqrt;
致电malloc
在您的功能中打印时,p=arraySqrt;
使用p=*newArray;