首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个C程序在第一次打印"ok“之后总是崩溃?

为什么这个C程序在第一次打印"ok“之后总是崩溃?
EN

Stack Overflow用户
提问于 2022-05-09 17:21:37
回答 2查看 48关注 0票数 0

这个程序在第一次打印“ok”后继续崩溃。我正在使用g++编译器在VS代码上运行它。

代码语言:javascript
复制
#include<stdio.h>
#include<stdlib.h>

struct rod {
    char name;
    int *list;
    int index;
};

int main()
{
    int n=3;
    struct rod *rodA, *rodB, *rodC;
    rodA->name = 'A';
    printf("ok");
    rodB->name = 'B';
    printf("ok");
    rodC->name = 'C';
    printf("ok");
    rodA->list = (int*) calloc(n, sizeof(int));
    rodB->list = (int*) calloc(n, sizeof(int));
    rodC->list = (int*) calloc(n, sizeof(int));
}
EN

回答 2

Stack Overflow用户

发布于 2022-05-09 17:24:30

这一行声明三个指针变量,但从不初始化它们。

代码语言:javascript
复制
struct rod *rodA, *rodB, *rodC;

然后,这一行破坏了内存,因为您从未将指针设置为有效的内存地址:

代码语言:javascript
复制
rodA->name = 'A';

在此之后,程序的行为是“未定义的”,最终会崩溃。

票数 1
EN

Stack Overflow用户

发布于 2022-05-09 17:23:29

这是因为内存冲突。您可以创建指向任何东西(垃圾)的指针。其中一个似乎指向只读内存,当您试图为其分配一些东西时,程序就会崩溃。尝试像这样分配它们:

代码语言:javascript
复制
struct rod *rodA = calloc(1, sizeof(struct rod));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72175939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档