c - 当我将指针设置为 NULL 时我的程序崩溃

标签 c pointers struct null crash

这让我抓狂,我已经完成了作业,但出于某种原因

for (int i = 0; i < room->num_of_challenges; i++) { // need a check
        if (strcmp(room_to_enter, room->challenges[i].challenge->name) == 0) {
            room->challenges[i].start_time = start_time;
            room->challenges[i].visitor = malloc(sizeof(room->challenges[i].visitor));
            room->challenges[i].visitor->current_challenge = malloc(sizeof(room->challenges[i].visitor->current_challenge));
            *room->challenges[i].visitor->current_challenge = room->challenges[i];
            *room->challenges[i].visitor->room_name = NULL;
            *room->challenges[i].visitor->room_name = malloc(strlen(room_to_enter)+1);
            strcpy(*room->challenges[i].visitor->room_name, room_to_enter);
            inc_num_visits(room->challenges[i].challenge);
        }
    }

此时程序由于某种原因崩溃了:

*room->challenges[i].visitor->room_name = malloc(strlen(room_to_enter)+1);

这是一个 3 页的代码,每页都有标题,每页大约 300 行,所以我不能全部发布,这里还有结构:

struct SChallengeActivity;
typedef struct SVisitor
{
  char *visitor_name;
  int visitor_id;
  char **room_name;
  struct SChallengeActivity *current_challenge;
} Visitor;


typedef struct SChallengeActivity
{
   Challenge *challenge;
   Visitor *visitor;
   int start_time;
} ChallengeActivity;


typedef struct SChallengeRoom
{
   char *name;
   int num_of_challenges;
   ChallengeActivity *challenges;
} ChallengeRoom;

我们不能编辑这个结构,因为它是由作业给出的,问题是我试图将这一行设置为 NULL,如下所示:

 *room->challenges[i].visitor->room_name = NULL;

它仍然在该行崩溃,由于某种原因它无法到达结构中的那个字段。 注意:忽略编码,我知道我应该在每一行之后检查 malloc,但现在我想让它工作,我整夜都在让它工作,但我做不到,有什么帮助吗? 谢谢

最佳答案

为访问者分配内存时,您只是在分配指针的大小。挑战中的访客字段只是指向访客的指针。因此,您没有分配足够的内存。你应该使用:

malloc(sizeof(Visitor))

获取访问者结构的真实大小并分配足够的空间。

此外,在分配之前将指针设置为空是无用的。对 malloc() 的调用将覆盖它们。

关于c - 当我将指针设置为 NULL 时我的程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44085856/

相关文章:

c++ - 函数参数 : Pointer to array of objects

C++ 指针数组为每个元素返回相同的值

c++ - struct sizeof 结果不是预期的

c - 使用 XPath 返回多个节点的串联属性值字符串

c、if语句不能正常工作

c - 如何将一个 .c 文件中定义的结构填充到另一个 .c 中定义的函数中,而不将指针作为参数传递?

c - 为什么 C 中的结构指针(方法)比普通函数慢得多?

python - C程序多次运行后性能下降

c++ - 一个/C++项目的基本结构(头文件和cpp文件)

c - 如何使用适当的内存管理将动态创建的结构保存在数组中?