yutiro 2014-10-04 06:52 采纳率: 0%
浏览 1934

c语言数组指针,不报错,就停止工作,请问哪里错了

第一次提问,多包含,也不报错,为什么一运行就按停止工作报错
#include
#include
#include

struct arr
{
int *pbase;//第一个元素的首地址
int len;//数组所能容纳的最大元素个数
int cnt;//当前数组有效元素个数
};

void init_arr(struct arr *p1,int length)
{
(p1->pbase) = (int *)malloc(sizeof(int) * length);//给数组分配空间

if(NULL == (p1->pbase))
{
    printf("分配内存失败!");
    exit(-1);
}
else
{
    p1->len = length;
    p1->cnt = 0;
}
return;

}

bool is_empty(struct arr *p3)
{
if(0 == (p3->cnt))
return true;
else
return false;
}

void show_arr(struct arr *p2)
{
if(is_empty(p2))
{
printf("用户数据为空!");
}
else
{
for(int i=0; i<(p2->cnt); i++)
{
printf("%d ", *((p2->pbase)+i));
}
printf("\n");
}
}

main()
{
struct arr *p;
int j;//数组最大长度

printf("请输入定义的数组的最大长度:");
scanf("%d", &j);
init_arr(p,j);
//init_arr(p,5);
show_arr(p);

}

  • 写回答

1条回答

  • gan681 2014-10-06 05:57
    关注

    在数据结构这本书中有类似的结构体调用,创建顺序链表的例子,其中关于这一语句

    void init_arr(struct arr *p1,int length)此处似乎应改为void init_arr(struct arr &p1,int length)

    不应使用*p1,这样*p1为指向该结构体指针,而是用&p1则为结构体p1的地址,然后调用时应该这样调用init_arr(p1,length),调用时只用p1,因为p1本来就是结构体地址,我们常常通过p1->len来使用数据。
    例如
    struct data{
    int i;
    int j;
    }p1;

    如果有
    data *p;

    *p=p1;
    那么想通过p访问p1中的i就应该
    (*p)->i;

    评论

报告相同问题?

悬赏问题

  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题
  • ¥60 高价有偿求java辅导。工程量较大,价格你定,联系确定辅导后将采纳你的答案。希望能给出完整详细代码,并能解释回答我关于代码的疑问疑问,代码要求如下,联系我会发文档
  • ¥50 C++五子棋AI程序编写
  • ¥30 求安卓设备利用一个typeC接口,同时实现向pc一边投屏一边上传数据的解决方案。