这个程序在第一次打印“ok”后继续崩溃。我正在使用g++编译器在VS代码上运行它。
#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));
}发布于 2022-05-09 17:24:30
这一行声明三个指针变量,但从不初始化它们。
struct rod *rodA, *rodB, *rodC;然后,这一行破坏了内存,因为您从未将指针设置为有效的内存地址:
rodA->name = 'A';在此之后,程序的行为是“未定义的”,最终会崩溃。
发布于 2022-05-09 17:23:29
这是因为内存冲突。您可以创建指向任何东西(垃圾)的指针。其中一个似乎指向只读内存,当您试图为其分配一些东西时,程序就会崩溃。尝试像这样分配它们:
struct rod *rodA = calloc(1, sizeof(struct rod));https://stackoverflow.com/questions/72175939
复制相似问题