为什么当我声明一个整数指针 p 并将其分配给函数的 return 值时会发生分段错误?

Why does a segmentation fault happen when i declare an integer pointer p and assign it to the return value of my function?

我的函数也是returns一个整型指针。我的印象是数组名称只是整数指针,所以这就是我这样声明它的原因。我创建了一个名为 reverse() 的函数来反转指针,当我 运行 它在我的 ubuntu 18.04 上使用 gcc 7.5 版时,我得到了一个分段错误核心转储。为什么会这样?正确且最有效的代码是什么?

#include <stdio.h>


int * reverse(int * array, int n){
    int * rev;
    int i = n - 1;
    int j = 0;
    while(i >= 0){
        rev[j] = array[i];
        j++;
        i--;
    }
    return rev;
}

int main(){
    int array[] = {1,2,3,4};
    int * p; //the pointer p that im declaring
    p = reverse(array, 4); //i think this is the segmentation error
    int i = 0;
    printf("the first element is %d", p[0]);
}

"I have made a function called reverse() to reverse a pointer and when i run it on my ubuntu 18.04 with gcc version 7.5, I get a segmentation fault core dumped. Why is this?"

reverse中的指针rev没有指向任何内存。在取消引用 rev 之前,您需要分配 n * sizeof(int) 的内存并分配 rev 指向那里。否则你会在访问未分配的内存时遇到未定义的行为。

int * rev = malloc( n * sizeof(int) );
if (!rev)
{
     perror("malloc");
     // error routine.
}