gpt4 book ai didi

c - 代码块中的动态分配

转载 作者:行者123 更新时间:2023-11-30 14:58:29 26 4
gpt4 key购买 nike

我正在尝试用 C 语言创建一个链接列表。我已经在学校使用的 Turbo C++ 中启动并运行了该程序。当我尝试将代码放入代码块时,我无法让它运行。我删除了大部分代码,以便您可以看到调试时停止工作的部分。当它编译时,它没有任何错误提示,只是停止工作。我想这可能是因为我动态分配内存的方式。

#include <stdio.h>
#include <stdlib.h>

struct data
{
int a;
int b;
};

struct node
{
struct data info;
struct node *urm;
};

struct lista
{
int lungime;
struct node *curent, *prim, *ultim;
};

struct lista *listax;

int creare(struct lista *LP)
{
LP->prim = (struct node*)malloc(sizeof(struct node));
LP->ultim = (struct node*)malloc(sizeof(struct node));
LP->prim->urm = LP->ultim;
LP->ultim->urm = NULL;
LP->curent=LP->prim;
LP->lungime = 0;
return 1;
}

int main()
{
creare(listax);
return 0;
}

我必须使用这种类型的声明,因为我们的老师希望我们以这种方式呈现列表(带有开始和结束节点)。如有任何帮助,我们将不胜感激。

*编辑:
整洁第一
最后是最后
lungime 是长度
urm 是下一个

最佳答案

你的内存分配确实不正确。在尝试分配给 LP 的每个成员之前您必须为 LP 本身指向的结构体分配空间,例如:

LP = malloc(sizeof(*LP));

其他建议

  1. 分配空间时,通常应该 check the result of the allocation function ( malloc()/calloc()/realloc() ),因为该函数可能返回 null如果无法分配所请求的内存。您可以通过简单的 if 来完成此操作malloc() 之后的声明,如:if (!LP) return -1;
  2. Do not cast the return value of malloc()
  3. 通常最好使用 sizeofvariable name rather than a type上,例如LP->prim = malloc(sizeof(LP->prim));
  4. 每当您分配内存时,您都应该记住在完成后释放分配的内存!使用free()去做这个。如果您不释放内存,程序就会泄漏内存,也就是说,它每次都会分配越来越多的内存,最终您计算机上的所有内存都被分配,即使您的程序实际上只需要使用它所分配的一小部分。请参阅thisthis .
  5. 正如 @StoryTeller 所指出的,使用空格使代码可读 - 将所有代码集中在一起以使其看起来更短,或者其他什么,并不会让它看起来专业,它只是看起来不可读(因此其他人很难帮助你)。

    在某些书写系统中,使用空格来划分单词或分组信息可能不是常态(例如,一些中东语言不太重视或根本不重视它),但很多代码都是用美式英语编写的,这确实。因此,编写同事、老师或贡献者可以轻松阅读的专业代码将涉及以这种方式使用空格,并且将是您需要学习的东西,就像学习语言的语法一样。

    This question可能是从代码风格开始的一个好点,但您也可以查看一些命名的 C 风格指南,例如 GNU、Linux 内核、BSD 等

关于c - 代码块中的动态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43305698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com