【问题标题】:No module definition file specified未指定模块定义文件
【发布时间】:2011-09-09 17:47:07
【问题描述】:

所以我有这个代码,下面给出了sn-p。

list* init(list* list1)
{
  list1->head = NULL;
  list1->size = 0;
  return list1;
}

list1 是一个链表,init 是从 main 函数调用的。 现在在线list1->head= NULL,在我运行代码后,它会突出显示这一特定行并说

未指定模块定义文件:使用默认值。

它停止了执行。

我在 Windows 7 上使用 Turbo C。

我该怎么办? 我可以发布完整的代码吗.. 虽然有点大..

【问题讨论】:

  • 能否添加断言(list1);在函数的顶部。
  • 我怀疑我们需要更多代码来解决这个问题。话虽如此,可能没有为您的编译器定义 NULL - 尝试list1->head = 0 看看它是否会抱怨。
  • @Chris 将其更改为 list->head =0 它说,一般保护异常 0x213F:0X000D 处理器故障
  • @eisbaw list* init(list* list1) { assert(list1) ; list1->head = NULL;列表1->大小= 0;返回列表1; } 在运行时给出断言失败。可能的原因?
  • @Karan if assert(list1) 失败,这意味着您在调用函数之前没有为 list1 分配内存。在这之前你有list* list1 = malloc(sizeof(list))吗?

标签: c turbo-c


【解决方案1】:

根据我们在 cmets 中的讨论,它看起来像是多种因素的组合。

首先,Turbo C 编译器似乎不知道 NULL 是什么。由于 NULL 只是 0 的 typedef,因此您可以使用 0 代替。

其次,您似乎还没有为列表对象分配内存。在调用函数之前尝试执行以下操作。

list* list1 = malloc(sizeof(list));

但是,如果您要创建并初始化一个新的 list 对象,则最好将函数重写如下:

list* init(){
    list *new_list = malloc(sizeof(list));
    new_list->head = 0; // <-- this sets head to the equivalent of NULL
    new_list->size =0;
    return new_list;
}

如果您想要的是一个重新初始化现有列表的函数,那么无论如何,您的当前代码都会导致内存泄漏。

【讨论】:

    【解决方案2】:

    NULL 在 C 的 中定义,而在 C++ 的等价的 中定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-08
      • 2021-12-31
      • 2018-10-09
      • 2015-06-21
      • 2021-01-06
      • 2021-07-17
      相关资源
      最近更新 更多