2017-02-26 57 views
-3
#include <stdio.h> 

int* createReverseArray(int *array, int size) 
{ 
    int i; 
    int newArray[size]; 
    for(i=size-1; i>=0; i--) 
    { 
     newArray[i] = array[size-i-1]; 
    } 

    return newArray; 
} 

int main(void) { 

    int myArray[] = {1,2,3,5,1}; 
    int myArray2[] = {1,2,3,4,2,1}; 
    int i; 

    int size = sizeof(myArray)/sizeof(int); 
    printf("Size: %d\n", size); 
    int* newArray = createReverseArray(myArray, size); 

    for(i=0; i<size; i++) 
    { 
     printf("%d, ", newArray[i]); 
    } 

    return 0; 
} 

我打印createReverseArray函数中的数组,并得到了正确的输出,但是当我指针返回数组,然后尝试打印结果,我认为它是指向每个阵列点的指针?我不太确定。返回指针数组没有给出预期输出在C

这将返回:

大小:5

12341002,1,-10772231820,-1077231812,1074400845,

+2

这是我敢肯定,一个经典的错误已被问在计算器上之前。您正在返回一个指向内部函数分配的内存的指针,该函数将消失。 Go语言足够聪明,可以完成这项工作并将该内存移动到堆上,但C无法做到这一点。你必须自己为这个数组设置malloc空间。 –

+1

@RayToal:它已被问过1000次以上...是的,这是一个非常基本的错误,不是从语言的基本概念开始。就像一本好C书一样。 – Olaf

回答

2

newarray是一个自动局部变量。一旦函数返回,它将不再存在。返回指向一个自动局部变量的指针调用undefined behaviour,在这种情况下可以预料到没有什么好处。

可以diynamically分配内存,然后返回指向它的指针

int *newArray = malloc(sizeof(int)*size); 
+0

即使我在createReverseArray()中调用malloc,我可以释放主函数中的内存吗? – DJSweetness

+0

@DJSweetness;是。阅读“免费”功能的工作原理。 – haccks

相关问题