传说中的航航哥 2022-04-06 20:27 采纳率: 66.7%
浏览 22
已结题

为什么第二和第三种方法可以编译成功但是运行会崩溃

1.
#include <stdio.h>

typedef struct {
int data;
} a;

void fun(a *t) {
t->data = t->data + 1;
}

int main() {
a t;
t.data = 1;
fun(&t);
printf("%d", t.data);
}

2.
#include <stdio.h>

typedef struct {
int data;
} *a;

void fun(a t) {
t->data = t->data + 1;
}

int main() {
a t;
t->data = 1;
fun(t);
printf("%d", t->data);
}
3.
#include <stdio.h>

typedef struct {
int data;
} a;

void fun(a *t) {
t->data = t->data + 1;
}

int main() {
a *t;
t->data = 1;
fun(t);
printf("%d", t->data);
}

  • 写回答

1条回答 默认 最新

  • IT_阿水 2022-04-06 22:17
    关注

    2和3是因为结构体指针 t 没有合法空间,使用malloc动态分配空间就可以了
    2.
    #include <stdio.h>
    #include <stdlib.h>
    typedef struct stu{
    int data;
    } *a;
    void fun(a t)
    {
    t->data = t->data + 1;
    }
    int main() {
    a t=malloc(sizeof(struct stu));//动态分配空间
    t->data = 1;
    fun(t);
    printf("%d", t->data);
    free(t);//释放空间
    }
    3.
    #include <stdio.h>
    #include <stdlib.h>
    typedef struct {
    int data;
    } a;

    void fun(a *t) {
    t->data = t->data + 1;
    }
    int main() {
    a *t=malloc(sizeof(a));//动态分配空间
    t->data = 1;
    fun(t);
    printf("%d", t->data);
    free(t);//释放空间
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月10日
  • 已采纳回答 4月7日
  • 修改了问题 4月6日
  • 修改了问题 4月6日
  • 展开全部

悬赏问题

  • ¥15 LLM accuracy检测
  • ¥15 pycharm添加远程解释器报错
  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口
  • ¥15 如何能达到用ping0.cc检测成这样?如图
  • ¥15 关于#DMA固件#的问题,请各位专家解答!
  • ¥15 matlab生成的x1图不趋于稳定,之后的图像是稳定的水平线
  • ¥15 请问华为OD岗位的内部职业发展通道都有哪些,以及各个级别晋升的要求
  • ¥20 微信小程序 canvas 问题
  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式