为什么当我声明一个整数指针 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.
}
我的函数也是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.
}