对数据结构的 malloc 函数有疑问吗?

发布于 科技 2024-03-31
10个回答
  1. 匿名用户2024-01-27

    每个 malloc 都申请一个新空间,原来的空间,因为你没有发布,仍然占用,但是,因为你丢失了操作的指针,你无法访问它。 要扩展现有空间,请使用 realloc 命令。

    指针名称 = (数据类型 *) realloc (用于更改内存大小的指针名称,新大小)。

    新大小可以大,也可以小(如果新大小大于原始内存大小,则不会初始化新分配; 如果新大小小于原始内存大小,则可能会丢失数据。

    头文件。 include 一些编译器需要 include,其中可以使用头文件。

    功能。 首先,确定当前指针是否有足够的连续空间,如果有,则展开 mem 地址指向的地址,并返回 mem 地址,如果空间不足,则先根据 newsize 指定的大小分配空间将原始数据从头到尾复制到新分配的内存区,然后释放原始MEM地址所引用的内存区(注意:原始指针自动释放,不需要空闲)。还返回新分配的内存区域的第一个地址。

    也就是说,重新分配内存块的地址。

    返回值。 如果重新分配成功,它将返回指向已分配内存的指针,否则将返回 null 指针 null。

    注意。 当内存不再使用时,应使用 free() 函数释放内存块。

    第一次分配使用 malloc,后期调整使用 realloc,这样就不会有数据丢失,不会浪费内存,最后必须释放。

  2. 匿名用户2024-01-26

    内存泄漏,应在空间不足后释放,free()。

  3. 匿名用户2024-01-25

    C语言中的Malloc是一个动态内存分配函数。

    函数原型:void *malloc(unsigned int num bytes);

    参数:num bytes 是一个无符号整数,表示分配的字节数。

    返回值:如果分配成功,它将返回指向已分配内存的指针(此存储中的初始值不确定),否则返回未确定类型的空指针,void * 可以指向任何类型的数据,更具体地说,当您请求内存空间而不知道用户使用此空间存储的数据类型(例如 char 或 int or.

    功能:分配长度为 num 字节的内存块。

    注意:当内存不再使用时,应使用 free() 函数释放内存块。 函数返回的指针必须正确对齐,以便它们可以与任何数据对象一起使用。

    关于这个函数的原型,以前 Malloc 返回一个 char 指针,新的 ANSIC 标准规定这个函数返回一个 void 指针,所以必要时需要进行类型转换。

  4. 匿名用户2024-01-24

    Malloc 用法需要包含头文件:

    #include ''

    例如:int *p;

    p = new int;返回类型为 int* 类型(整数指针)。 分配大小为 sizeof(int);

    或者: int* parr;

    parr = new int [100];返回类型为 int* 类型(整数指针)。 分配大小为 sizeof(int) *100;

    另一方面,Malloc 必须由我们计算字节数,并在返回后强制转换为实际类型的指针。

    int* p;

    p = int *)malloc (sizeof(int));

    关于使用函数的一些注意事项:

    1. 申请内存空间后,必须检查分配是否成功。

    2.当您不再需要使用应用的内存时,记得释放它; 释放后,指向此内存段的指针应指向 null,以防止程序以后意外使用它。

    3.这两个功能应该配对。 如果在应用程序后没有发布,则为内存泄漏; 如果它无缘无故地被释放,它就什么都不做。 你只能释放一次,如果释放两次或更多次,就会出现错误(除了释放空指针外,释放空指针实际上什么都不做,所以释放空指针多少次都无所谓)。

  5. 匿名用户2024-01-23

    size 只是请求的内存字节的大小,而不管请求的内存块中存储的数据类型如何,因此在编程时需要按以下方式给出:"长度 * sizeof(数据类型)。"。

    具体使用及编译方法如下:

    动态分配内存,输入 5 条数据,打印 60 以下的值:

  6. 匿名用户2024-01-22

    void *malloc(int size);

    注意:Malloc 适用于系统,用于分配指定大小的内存空间。 返回类型为 void*。

    void* 表示类型未确定的指针。 C、C++ 指定 void* 类型可以强制转换为任何其他类型的指针。

    这可以从函数声明中看出。 malloc 和 new 至少在两个方面不同:new 返回指定类型的指针,并自动计算所需的大小。

    例如:int *p; p = new int;返回类型为 int* 类型(整数指针),分配大小为 sizeof(int); 或者: int* parrparr = new int [100]; 返回类型为 int*(整数指针),分配大小为 sizeof(int) *100

    另一方面,Malloc 必须由我们计算字节数,并在返回后强制转换为实际类型的指针。

    int* p;p = (int *)malloc (sizeof(int));

    首先,malloc 函数返回一个 void * 类型,如果将其写成: p = malloc (sizeof(int)); 程序将无法编译,并显示错误消息:“无法将 void* 分配给 int * 类型变量”。

    所以你必须用 (int *) 来转换它。

    第。 2. 函数的参数是sizeof(int),用于表示整数数据的大小。 如果你写成:

    int* p = (int *)malloc (1);

    **也可以编译,但实际上只分配了1个字节的内存空间,当你把一个整数存进去时,3个字节就会无家可归,“住在邻居家”! 结果,后续内存中的所有原始数据内容都将被清空。

    malloc 还可以实现 new 的效果,通过指定您需要的内存量来声明连续的内存周期。

    例如,如果要分配 100 个 int 空格:

    int* p = (int *)malloc ( sizeof(int) *100 );分配最多可容纳 100 个整数的内存空间。

    另一个无法直接看到的区别是 malloc 只分配内存,但不初始化生成的内存,因此生成的新内存的值将是随机的。

    除了分配和最终释放的方法不同,指针是通过 malloc 或 new 获取的,其他操作相同。

  7. 匿名用户2024-01-21

    Malloc适用于操作系统,在程序运行时分配一个连续的内存空间(内存块),位置在堆内存上,内存地址由操作系统决定,称为动态分配; 在编译时分配或排列内存空间称为静态分配,静态分配的内存空间一般在堆栈上,相对于程序进程空间,由编译器决定,这是两个主要区别。

    请自行了解堆栈和堆栈的相关知识。

    int a;定义一个整数变量(静态分配一段内存空间来保存整数,通常为 4 个字节)。

    int *p=(int *)malloc(sizeof(int));动态为整数分配内存空间。 它也是 4 个字节。

    静态分配内存和 new 关键字都是已知类型,无论内存用于存储什么类型的数据,malloc 都会分配空间,因此它返回一个虚拟指针,因此需要强制转换,例如,在 malloc 前面应该有 (int *) 的情况下。

  8. 匿名用户2024-01-20

    看起来你要编写一个分配空间的函数 f。

    1.标识符 parr 对应于一个指针变量,该变量通常为 4 或 8 个字节。 此变量用于存储 struct student* 类型的内存地址。

    2.函数调用 f(parrr) 将变量的内容传递给 f,即结构 student * 类型的地址。 但是,由于标识符的作用域,f 不知道此指针变量的内存位置,并且它仅对堆栈空间中指针变量的副本进行操作。

    在这种情况下,无法通过正常方式修改指针变量 parr 的值。

    3.函数调用 f(&parr) 将变量的内存地址传递给 f,f 是 struct student 类型的地址值。 f 使用此地址,您可以操作此地址中的数据以访问或修改指针变量 parr。

  9. 匿名用户2024-01-19

    "但是为什么要发送 f(&parr)?"

    这句话从何而来?

  10. 匿名用户2024-01-18

    1. malloc() 不初始化分配的空间。 (即,您申请的空间内容是不确定的,可能有价值,也可能没有价值)。

    2. 当 free() 释放请求的空间时,空间中的内容不会被自动清除。

    3.在连续的malloc和free过程中,内存中会产生一系列的记忆碎片,整个记忆就像一个大垃圾场。 当你再次申请内存时,新分配的内存空间是建立在这个垃圾转储上的,如果你做得不好,就会引起问题(例如,不清理就使用它,不分配输出等)。

    要了解以上三种情况和其他问题,我认为你不需要多猜测。 学习如何正确使用指针是件好事,当你积累了更多的知识时,请相应地思考。

相关回答
8个回答2024-03-31

大数据只是互联网发展到现阶段的一个表现或特征,没有必要对它进行神话化或保持敬畏感,在以云计算为代表的技术创新背景下,这些原本难以收集和使用的数据开始变得容易使用, 通过各行各业的不断创新,大数据将逐步为人类创造更多的价值。 >>>More

11个回答2024-03-31

总结。 30名乘客同舟共济,由于超载严重,加上风浪大,极其危险; 于是船长告诉乘客,只有把船上的一半乘客扔进海里,剩下的才能活下来。 无奈之下,大家只好同意这个方法,约定30个人围成一个圆圈,从第一个人开始,顺时针数,数到第9个,然后把他扔进海里,然后从他的下一个数字开始数,逆时针数到第5个人,把他扔进海里,然后从他的下一个逆时针数开始, 顺时针数到第 9 个人,然后把他扔进海里,依此类推,直到剩下 15 名乘客。 >>>More

6个回答2024-03-31

首先,你去这里看一看,然后。

15个回答2024-03-31

福建枣数表:一种使用手势翻译语言痕迹的数据结构。

3个回答2024-03-31

树是 n (n 0) 个节点的有限集合。 n=0 称为空树。 在任何非空树中: >>>More