C打印双字型指针值不起作用

时间:2014-02-15 22:18:11

标签: c arrays pointers printf

我需要制作一个简单的程序来制作由第一个数组中的sqrt-ed元素组成的新数组。我必须在main中编写新数组的元素。我试图调试我的代码,变量xy显示了很好的数字(我只是初始化它们以便我可以观察调试器的进度),但是当我尝试编写新数组的元素时,它显示了一些奇怪的数字。一些善良的灵魂可以解释我的错误吗?

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++;
    }   
}

1 个答案:

答案 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;