2014-11-01 5 views
0

Игра с массивом, проходящая в c. Определение массива в функции Get_Present_Location() и передача его в качестве указателя на главную, где я просто печатаю его. Кажется, что это работает, за исключением последнего элемента. Вместо -7 я получаю 0. Вероятно, есть глупая ошибка с моей стороны, но я не могу понять, почему.Array parring in C

#include <stdio.h> 
#include <stdlib.h> 

double *Get_Present_Location(); 

int main(){ 

    double *Present_Point; 
    Present_Point=Get_Present_Location(); 

    for (int i=0;i<6;i++) 
    { 
     printf("Joint[%d] = %f\n",i+1,Present_Point[i]); 
    } 

    return 0; 
} 

double *Get_Present_Location() 
{ 

    double point[6]={4,1,5,-3,5,-7}; //Temporary 

    return &point; 
} 

ответ

3

Вы ответили на ваш вопрос.

т.е.

double point[6]={4,1,5,-3,5,-7}; //Temporary 

Это временно (также код не компилируется с предупреждениями)

0

В C, как только вы недопустимые указатели всяких таинственных вещей могут произойти. У вас здесь две проблемы. Первый

return &point; 

это возвращается двойной **, указатель на указатель, вы должны вместо

return point; 

Сам массив эффективно указатель вдвое.

Более важно, как вы заметили, вы возвращаете указатель на временный или локальный кусок хранилища. При возврате из функции эта память, которая, вероятно, находится в стеке, открыта для повторного использования, возможно, в следующем вызове функции. Вы возвращаете указатель на некоторое расположение стека, которое подвержено произвольным изменениям, фактически мусор.

Вы должны вместо этого выделить некоторую память и вернуть указатель на это.