【发布时间】:2014-02-15 22:18:10
【问题描述】:
我需要制作一个简单的程序来创建由第一个数组中的 sqrt 元素组成的新数组。我必须在 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++;
}
}
【问题讨论】:
-
double* arraySqrt=(double*)malloc(length*sizeof(double));不正确。 not cast the return value of malloc 是一个很好的理由。 -
你不应该这样做
newArray++;,你会立即失去对你malloc()ed的记忆的引用,你将无法再次使用这些元素,除非你备份。 -
@StoryTeller:
malloc()通话很好,除了演员。 -
StoryTeller:当我不投射 malloc 时,我收到此错误:IntelliSense:“void *”类型的值不能用于初始化“double *”类型的实体 @PaulGriffiths:你能解释一下吗我如何从 main 写入新数组的元素?
-
@MahirDuraković:那么当您实际使用 C++ 时,您错误地将您的问题标记为 C。一旦解决了存储错误指针的问题,您就可以将新数组的元素写为
newArray[i] = whatever;。