如何解决为什么在声明整数指针p并将其分配给函数的返回值时发生分段错误?
我的函数还返回一个整数指针。我的印象是数组名称只是整数指针,所以这就是为什么我这样声明它的原因。我做了一个叫做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]);
}
解决方法
“我已经创建了一个名为reverse()的函数来反转指针,当我在ubuntu 18.04和gcc版本7.5上运行它时,我得到了分段故障核心信息。为什么?”
rev
中的指针reverse
没有指向任何内存。在取消引用n * sizeof(int)
之前,您需要分配rev
的内存并分配rev
指向该内存。否则,访问未分配的内存时会有不确定的行为。
int * rev = malloc( n * sizeof(int) );
if (!rev)
{
perror("malloc");
// error routine.
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。