malloc 未定义

2023-11-25

我目前正在重写链表模块,并且收到一些奇怪的错误。

在两个 IDE(Netbeans 和 Visual Studio Express)中,我收到一条警告:malloc未定义,并且在 linkedlist.c 文件中找到的函数也未定义。

下面是我的 3 个文件。

main.c

#include <stdlib.h>  
#include <stdio.h>  
#include "linkedlist.h"  
int main(void){  
 struct linked_list * l_list;   
 l_list = new_list();  
 printf("%i", l_list->length);  
 getchar();  
 return (EXIT_SUCCESS);  
}

链表.h

#ifndef LINKEDLIST_H  
#define LINKEDLIST_H  
struct linked_list{  
 int length;  
 struct linked_list_node * head_node_ptr;  
};  
struct linked_list_node{  
 struct linked_list_node * prev_node_ptr;  
 struct linked_list_node * next_node_ptr;  
 struct linked_list_data * head_data_ptr;  
};  
struct linked_list_data{  
 struct linked_list_data * prev_data_ptr;  
 struct linked_list_data * next_data_ptr;  
 void * data;  
};  
struct linked_list * new_list();  
#endif  

链表.c

#include "linkedlist.h"  
struct linked_list * new_list(){  
 struct linked_list * temp_list = malloc(sizeof(struct linked_list));  
 temp_list->length = 5;  
 return temp_list;  
}  

任何帮助将不胜感激。我不确定这是否是语法问题或我的计算机上缺少文件。


你包括在哪里<stdlib.h>——因为那就是那里malloc()被宣布?

这是编译问题吗(malloc()未声明)或链接问题(malloc()不明确的)?

错误信息具体是什么?


现在代码可读了:

  • <cstdlib>是一个 C++ 头文件(也是<cstdio>).
  • 您需要包括<stdlib.h> in C.
  • 您需要包括<stdlib.h>哪里的malloc()使用函数 - 在linkedlist.c.

You also have had the header guards in the wrong place in linkedlist.h, but the code in the question has been updated since. Originally, the sequence was:

#ifndef LINKEDLIST_H  
#define LINKEDLIST_H
#endif
struct linked_list{
…

头文件的规范结构是:

#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED

...the other material in the header...
...definitions and declarations...

#endif /* HEADER_H_INCLUDED */

The #endif是文件中最后一个非注释、非空行——而不是第三行。


即使对于双向链表来说,您的数据结构也非常复杂。您确定您会经常需要该长度,以至于需要在列表中的每个节点中维护指向头的指针吗?如果您经常使用它,我会感到惊讶。我假设每个节点都有指向头的指针,这样当您从列表中删除任意节点时,您可以减少列表的长度。您可能最好传递一个指向列表的指针和指向要删除的节点的指针,而不是您所拥有的。

我看不出有什么理由length = 5 in the new_list()功能。


此外,C 和 C++ 在以下含义上存在根本差异:

struct linked_list * new_list();

在 C++ 中,这意味着“new_list()是一个不带参数并返回一个函数struct linked_list指针”。

在 C 语言中,这意味着“new_list()是一个具有完全不确定的参数列表的函数,它返回一个struct linked_list指针”。函数已声明,但没有该函数的原型。

在 C 语言中,你应该这样写:

struct linked_list * new_list(void);

就我个人而言,我更喜欢看到extern位于标头中函数声明的前面;它实际上对于功能来说并不是必需的,但因为它(extern) 对于标头中声明的变量是(或应该是)必需的,我更喜欢标头中声明的函数的对称性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

malloc 未定义 的相关文章

  • 使用 #pragma Once 和 #ifndef 时出现 VS 2010 C++ LNK2005 错误

    1 gt Deck obj error LNK2005 class Card card card 3VCard A already defined in Card obj 1 gt PokerTester obj error LNK2005
  • 我的 std::hash for std::tuples...有什么改进吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有些人可能已经注意到 std hash 不支持元组 所以我添加了一个重载 它看起来比我到目前为止看到的解决方案 更好 有人有进一步减少这段代码的
  • 如何在 ASP.NET MVC 中将 XML 文件发送到客户端

    在 ASP NET MVC 中 我有一个数据库表 我想在某个视图页面上有一个按钮 如果某个用户单击该按钮 我的应用程序将生成包含数据库中所有行的 XML 文件 然后 应将包含 XML 的文件发送到客户端 以便用户看到下载弹出窗口 同样 我希
  • 如何通过覆盖 MSBuild 目标来防止外语资源生成?

    我正在致力于减少大型 C ASP NET 解决方案的编译时间 我们的解决方案使用通常的 resx 文件方法翻译成大约十几种外语 这些资源文件的解析和编译极大地减慢了我们的编译时间 并且是日常的挫败感 我知道可以创建自定义资源提供程序并摆脱
  • Winform DatagridView 数字列排序

    我只使用一个简单的 DataGridView 来保存一堆数据 有趣的是 我在特定列中有小数 但是当按小数列排序时 它的排序是错误的 例如 起始顺序可能是 0 56 3 45 500 89 20078 90 1 56 100 29 2 39
  • C++ 指针和对象实例化

    这有效 MyObject o o new MyObject 而这并不 MyObject o new MyObject Why 关键词new 返回一个指针 http msdn microsoft com en us library kewsb
  • 预编译头和 Visual Studio

    有没有办法设置 Visual Studio 解决方案参数 以便它只创建预编译头而不构建整个解决方案 具体来说 它是一个巨大的 C 解决方案 本身有许多项目 谢谢 仅选择 pch 创建者源文件 通常是 stdafx cpp 然后编译该文件 C
  • 无法将参数从 `const char *` 转换为 `char *`

    鉴于此代码 void group build int size std string ips Build the LL after receiving the member list from bootstrap head new memb
  • 从内存流播放视频文件

    只是好奇看看这是否可能 我有一个 Windows 应用程序 它从我的电脑上的 avi 文件读取所有字节 然后将其存储在 byte 中 现在我的内存中有 avi 文件 我想直接从内存将其加载到某种视频播放器控件中 我尝试过使用 wmplaye
  • QSpinBox 输入 NaN 作为有效值

    我正在尝试扩展 QSpinBox 以能够输入 NaN 或 nan 作为有效值 根据文档 我应该使用 textFromValue valueFromText 和 validate 函数来完成此操作 但我无法让它工作 因为它仍然不允许我输入除数
  • 为什么 BinaryFormatter 可以序列化 Action<> 但 Json.net 不能

    尝试序列化 反序列化 Action 尝试我的 1天真 JsonConvert SerializeObject myAction JsonConvert Deserialize
  • 检测反射 DLL 注入

    在过去的几年中 恶意软件 以及一些渗透测试工具 如 Metasploit 的 meterpreter 负载 已经开始使用反射 DLL 注入 PDF http www harmonysecurity com files HS P005 Ref
  • ASP.net WebForms - 在标记中使用 GetRouteUrl

    我一直在尝试弄清楚如何将路由功能与 ASP net 4 0 WebForms 一起使用 我将一条路线添加到我的路线集合中 void Application Start RegisterRoutes RouteTable Routes voi
  • 使用 OleDbCommand / OleDbDataAdapter 读取 CSV 文件

    我不明白为什么 但是当我使用 OleDbDataAdapter 或 OleDbCommand 读取 CSV 文件时 在这两种情况下 生成的数据结构良好 它识别文件头中的列 但行数据都是空字符串 我之前已经成功进行过多次 CSV 处理 因此我
  • 如果finally 块包含await,为什么*有时*不会在ThreadAbortException 上执行?

    UPDATE 我不认为这个问题是重复的ThreadAbortException最后可以跳过吗 https stackoverflow com questions 18002668 can threadabortexception skip
  • 在 C# .NET 中对非 ASCII 字符进行编码

    我想向我的应用程序发送的电子邮件添加自定义标头 标头名称只能包含 ASCII 字符 但对于值和用户可能会输入 UTF 8 字符 我必须对它们进行 Base64 编码 此外 我还必须将它们解码回 UTF 8 以便在 UI 中向用户显示它们 最
  • 使用 cmake 将两种解决方案合二为一

    我有两个单独的 Visual Studio 2013 解决方案 我想将它们迁移到一个解决方案中 因为第一个解决方案 使用 Qt 充当第二个解决方案的 GUI 最后 我希望有一个结构如下的单一解决方案 Solution All Build P
  • 意外的 const 引用行为

    include
  • Unity - 在生成时获取随机颜色

    我有一个小问题 我想在我的场景中生成四边形 它们都应该有红色或绿色作为材质 但 Random Range 函数只能是 int 我该如何解决它 void SpawningSquadsRnd rndColor 0 Color red rndCo
  • 创建进程默认浏览器

    我目前正在使用 ShellExecute 打开 在用户浏览器中打开 URL 但在 Win7 和 Vista 中遇到了一些麻烦 因为该程序作为服务运行提升 我想获取线程 id 因此 ShellExecute 无法获取线程 id 因此我开始使用

随机推荐