【发布时间】:2011-12-06 23:40:36
【问题描述】:
我正在尝试从函数返回指针。但是我遇到了分段错误。有人请告诉代码有什么问题
#include<stdio.h>
int *fun();
main()
{
int *ptr;
ptr=fun();
printf("%d",*ptr);
}
int *fun()
{
int *point;
*point=12;
return point;
}
【问题讨论】:
-
处理指针时最重要的问题是:指向什么的指针? 一个本地对象?卡布姆。动态分配的对象?被谁释放?一些对象存储在其他地方?那么该对象能存活多久,我的指针有效多久?从函数返回指针尤其充满风险,因为指针是在完全不同的代码中初始化的(调用者通常甚至看不到),而调用者不知道如何处理结果。此类功能的良好文档非常重要。
-
请记住始终 malloc 任何对象、指针和数据结构。如果你不这样做,你总是会遇到分段错误,因为它只是说我们没有为你分配任何空间。
-
当您“更改代码中的错误”时,您的答案(部分)与问题无关。有问题的代码并不完美,这就是问题的原因。我强烈建议避免修复任何有问题的代码。
-
您好,通过
malloc进行操作和像*ptr = 12进行操作有什么区别?为什么前者即使在发送方本地声明时也会返回指向调用方的有效指针,而后者却没有? -
@AttitudeMonger 因为
malloc说“我想要一些内存来存储东西”,但普通的旧*ptr = 12说“我想要一些内存来进行计算,它可以用于其他以后的事情”。
标签: c pointers segmentation-fault