精华内容
下载资源
问答
  • 问题:当一个结构体的成员为指针类型时,为这个结构体申请内存时,并不会给指针成员分配内存。 程序如下: #include <stdio.h> #include <stdlib.h> typedef struct example { int *a; char *b; }...

    问题:当一个结构体的成员为指针类型时,为这个结构体申请内存时,并不会给指针成员分配内存。

    程序如下:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct example
    {
    	int *a;
    	char *b;
    }example_t;
    
    int main(int argc, char** argv)
    {
    	example_t *exam;
    	exam = (example_t *)malloc(sizeof(example_t));
    	if(NULL == exam)
    	{
    		printf("%s\n", "exam malloc failed");
    		return -1;
    	}
    	printf("%p\n", exam);
    	printf("%p\n", exam->a);
    	printf("%p\n", exam->b);
    	free(exam);
    	return 0;
    }

    结果如下:

    $ gcc exam.c
    $ ./a.out 
    0x1051150
    (nil)
    (nil)

    可见结构体当指针成员是不会被分配内存的。

    解决方案:给结构体申请空间的时候,同时给指针成员申请空间

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct example
    {
    	int *a;
    	char *b;
    }example_t;
    
    int main(int argc, char** argv)
    {
    	example_t *exam;
    	exam = (example_t *)malloc(sizeof(example_t));
    	if(NULL == exam)
    	{
    		printf("%s\n", "exam malloc failed");
    		return -1;
    	}
    	printf("%p\n", exam);
    	printf("%p\n", exam->a);
    	printf("%p\n", exam->b);
    
    	printf("\n");
    
    	exam->a = (int *)malloc(sizeof(int));
    	exam->b = (char *)malloc(sizeof(char));
    
    	printf("%p\n", exam);
    	printf("%p\n", exam->a);
    	printf("%p\n", exam->b);
    
    	free(exam);
    	free(exam->a);
    	free(exam->b);
    	return 0;
    }

    结果如下:

    $ gcc exam.c 
    $ ./a.out 
    0xd8d150
    (nil)
    (nil)
    
    0xd8d150
    0xd8d568
    0xd8d578

    此时,结构体的指针成员都有被分配内存。

     

    展开全文
  • malloc动态申请'内嵌'结构体的内存

    千次阅读 2018-06-11 00:07:57
    在做怦怦交易的客户端遇到的结构体问题可以看到ItemArguments相当于内嵌两个结构体,malloc时我用了下面的方法,怎么看起来那么lowtypedef stuct ITEMTYPE{ NoneItem = 0,//空类型的Item LeftItem = 1,//聊天公告...
    
    

    在做怦怦交易的客户端碰到的结构体问题



    typedef enum ITEMTYPE
    {
        NoneItem = 0,//空类型的Item
        LeftItem = 1,//聊天公告我的
        TopItem = 2,//专栏本子资源
        CenterItem = 3 //中间的显示消息
    } ItemType;


    typedef enum INDEX
    {
        Index_LiaoTianItem = 0,
        Index_GongGaoItem = 1,
        Index_WoDeItem = 3,
        Index_ZhuangLangItem = 4,
        Index_BenZiItem = 5,
        Index_ZiYuangItem = 6,
        Index_DisplayItem = 7,
        Index_DisplayItem1 = 8,
        Index_DisplayItem2 = 9,
        Index_DisplayItem3 = 10,
        Index_DisplayItem4 = 11,
        Index_DisplayItem5 = 12


    }Index;


    typedef struct TEXT_STRUCT
    {
        char * text; //项目中的文字
        int x,y; // item中文字的位置
        int width,height; //项目区域中文字占的大小
    } Text_Struct;


    typedef struct IMAGE_STRUCT
    {
        char * imagePath; // item中图片的路径
        int x,y; // item中图片的位置
        int width,height; //项目中图片的宽高
    } Image_Struct;


    //定义传入实例item的参数结构体
    typedef struct ITEMARGUMENT
    {
        Index index; // item的索引
        ItemType type; // item的类型
        int x,y; // item的坐标
        int width,height; // item的大小
    // char * PicturePath; //图片的路径
    // char *文本; // CenterItem显示的文字
        Text_Struct * Text;
        Image_Struct *图像;

    } ItemArguments;


    我是这样申请的,感觉不专业,嗯。凑全着用

        ItemArguments * MyItemArguments = NULL ; 
        Text_Struct * aa =(Text_Struct *) malloc sizeof Text_Struct ));  
        Image_Struct * bb =(Image_Struct *) malloc sizeof Image_Struct ));  
        MyItemArguments =(ItemArguments *) malloc sizeof ItemArguments )); 
        MyItemArguments - > Text = aa ;
        MyItemArguments - > Image = bb ;

    展开全文
  • 例如此时: int init(struct Node**head ) //结构体指针 初始化 { struct Node *newnode = (struct Node *)malloc(sizeof(struct Node));...如果定义一个结构体类型的普通变量,可以不malloc动态申请内存,CPU会

    例如此时:
    int init(struct Node**head ) //结构体指针 初始化
    {
    struct Node *newnode = (struct Node *)malloc(sizeof(struct Node));
    if(NULL == newnode)
    {
    return -1;
    }
    newnode->value = 0;
    newnode->next = NULL;
    *head = newnode;
    }
    如果定义一个结构体类型的普通变量,可以不malloc动态申请内存,CPU会为这个结构体变量分配内存
    如果定义的是一个结构体的指针,CPU会为这个指针开辟内存,但是此时这个大小是4(如果是32位的CPU的话),所以这个空间不足以存储结构体的数据成员,就会引发错误,此时必须要malloc申请一个,结构体类型大小的动态内存,用于数据成员存储使用

    展开全文
  • 以 template<typename Key, typename Value> struct Node {}; 为例,试创建有n个Node类型的node的数组。 方法一(nodes[i]为指针): struct Node<...*)malloc(sizeof(struct Node&

    template<typename Key, typename Value>
    struct Node {};

    为例,试创建有n个Node类型的node的数组。

    方法一(nodes[i]为指针):

    struct Node<int, int> *nodes[n];
    for (size_t i = 0; i < n; i++)
        nodes[i] = (struct Node<int, int>*)malloc(sizeof(struct Node<int, int>) * n); 

    使用

    for (size_t i = 0; i < n; i++) {
        std::free(nodes[i]);
    }

    释放nodes的内存。

    方法二(nodes[i]为指针):

    struct Node<int, int> **nodes = (struct Node<int, int>**)malloc(sizeof(struct Node<int, int>*) * n);
    for (size_t i = 0; i < n; i++)
        nodes[i] = (struct Node<int, int>*)malloc(sizeof(struct Node<int, int>));

    使用

    for (size_t i = 0; i < n; i++) {
        std::free(nodes[i]);
    }
    std::free(nodes);

    释放nodes的内存。

    方法三(nodes[i]为结构体struct):

    struct Node<int, int> *nodes = (struct Node<int, int>*)std::malloc(sizeof(struct Node<int, int>) * n);

     使用

    std::free(nodes);

    释放nodes的内存。如果将nodes插入到类中,注意应考虑类的析构函数。

    错误方法:

    struct Node<int, int> (*nodes)[n] = (struct Node<int, int>(*)[n])std::malloc(sizeof(struct Node<int, int>) * n);

    (参考How to dynamically allocate a 2D array in C?malloc申请二维数组的四种方法

    展开全文
  • 使用malloc()函数创建结构体

    千次阅读 2021-05-21 09:46:11
    malloc()可用来为结构体分配存储空间结构体的大小通过使用sizeof运算符来确定。示例代码#include #include #include int main(){struct Product {char symbol[5];int quantity;double price;};struct Product *...
  • 设计一个简单的结构体模板 ,用于汽车销售系统的搜索界面数据库。动态分配一定的内存空间,存储已有的各种类型的汽车信息。 提示:不能使用指针pcarinfo将已分配的内存区域释放,因为此时由于for循环内pcarinfo做自增...
  • 在本科以来,由于老师和自己的种种原因,我一直不知道结构体Malloc是什么,每当考试的时候,尤其是数据结构和操作系统考试的时候,我就会对着诸如《【C】利用单链表数据结构实现通讯录,链表的增删改查》(点击...
  • } } 中的FirstCell指针有疑问,质疑为什么不使用malloc函数申请内存。 我查了K&R的黑皮书。意思是指针也是变量,通过赋值,可以让FirstCell也指向S->Next节点,跟需不需要申请内存无关。 //黑皮书的原文: 指针也是...
  • malloc创建堆区结构体

    2021-07-15 12:55:31
    如果想利用堆区创建临时结构体用以存储数据并同时输出时,首先需要使用memset函数清空结构体成员,这一步必须做,如若不然,导致出错。 具体原因:个人认为是在堆区创建变量时,内存未初始化,如果所存数据小于...
  • 区别是new/delete在底层还是借助malloc/free申请的内存空间,然后调用类的构造函数(先申请内存空间,然后调用构造函数创建对象),进行成员变量的初始化等一系列工作,最后返回对象的指针,delete会调用析构函数,...
  • sizeof(a)就是结构体的大小(两个int的size之和)。如果用sizeof(b)则有问题,因为sizeof(b)只是指针本身的大小。ANSI/ISO C规定:malloc(0)的结果由编译器自己决定,可以返回NULL指针,也可以返回...
  • 结构体申请变量后,一定要全部初始化,不然在某些IDE上可能出现bug;` 仔细看下面的,错误一大堆一大堆 #include<string.h> #include<malloc.h> #include<stdio.h> #include<stdlib.h> ...
  • 本人声明了一个结构体包含id,age,name三个属性structstudentInfo{intid;...但是为姓名属性申请空间好像有问题,每次输出都是最后一个输入的学生的姓名,年龄和id都对;代码如下:#include#defineERROR-...
  • 使用calloc函数 3.1 函数详解 函数原型:void* calloc(unsigned int num,unsigned int size) 所在头文件:stdlib.h 动态申请内存函数之一,相当于用malloc函数申请并且初始化一样,calloc函数会将申请的内存全部...
  • 1. 单链表结点 //Definition for singly-linked list. struct ListNode { ... //声明一个单链表结点,并给他分配空间,结点的值val初始化为0,其指向下一个结点的指针为NULL ListNode* node=new ListNode(0); /
  • 如果定义一个结构体类型的普通变量,可以不malloc动态申请内存,CPU...就会引发错误,此时必须要malloc申请一个,结构体类型大小的动态内存,用于数据成员存储使用拓展一下,malloc是动态申请,调用后会根据虚拟映射...
  • 结构体中的malloc 与 free

    千次阅读 2016-12-15 11:47:20
    结构体中动态内存的管理(malloc和free) C语言中内存的管理主要是依据malloc和free实现的,其中malloc...其中最大的问题是:结构体中指针变量没有指向一块合法的内存空间,就对指针参数进行操作,这也是很多C
  • C语言--结构体指针需要malloc

    千次阅读 多人点赞 2018-07-06 17:42:36
    如果定义一个结构体类型的普通变量,可以不malloc动态申请内存,CPU...就会引发错误,此时必须要malloc申请一个,结构体类型大小的动态内存,用于数据成员存储使用拓展一下,malloc是动态申请,调用后会根据虚拟映射...
  • C语言中关于结构体指针的内存分配问题 话不多说先上一段代码 typedef struct stu { char filename[100]; char *name; }stu; int main() { stu *st; strcpy(st->filename,"dsssssddd"); strcpy(st->name,...
  • c语言中malloc申请空间和直接定义变量申请的空间有什么区别? 1. malloc事先分配好了内存空间。 要点有三点:一是空间分配的连续性;二是动态内存申请;三是防止程序执行中出现异常错误。 如果用数组定义:...
  • 而在定义结构体这种数据类型的时候是不会分配内存空间的,只有在定义变量的时候,才会分配。 经过查阅资料,我认为下面的博主讲解的很详细,所以写下这篇文章用来提醒自己,方便自己以后查阅资料! C语言中内存的...
  • struct node{ 结构体内容; }; 第一种:使用malloc,struct node *element = (struct node *)malloc(sizeof(struct node)); 第二种:使用new node;
  • 下标[]指的是结构体本身,+ 指的是指向第i个结构体的指针 pstrfid[i].name = "cyc"; } TEST *psttmp = &(pstrfid[5]); cout << psttmp->ID << psttmp->name ; free(pstrfid); return 0; }
  • 一:malloc申请动态空间注意以下事项: 1,malloc申请动态空间时必须声明类型; 2,使用malloc申请空间在使用完成之后必须使用free释放; 3,malloc申请空间的类型必须和指向他的指针类型匹配;such as: int *p; p=...
  • 假设我在ANSI C中有这个结构:typedef struct _point{float x;float y;} Point;而这个函数来创建这个struct:Point createpoint(float x...}这允许我创建一个具有此功能的结构体,即:int main(){Point pointOne = cr...
  • 使用结构体错误:#include &lt;stdio.h&gt; struct STU { char *name; int score; }stu,*pstu; int main () { strcpy(stu.name,"bit-tech"); strcpy(pstu-&gt;name,"bit-tech")...
  • 这个问题是我在2020年刚开始学数据结构链表那一章遇到的,当时应该也没完全理解透彻,然后最近又遇到了,重新...2.再是指针的问题,指针是一种c自带的数据类型,指针自己的空间在定义指针变量的时候就会分配(如:int
  • 偶尔出现分配不到空间情况,且用Malloc分配空间频繁时也出现空间分配失败。 问题定位: malloc内存分配失败无非是下面两种情况:可用内存不足和数组指针越界。因为这里分配空间失败后,还能成功分配到空间,可以...
  • 手把手教你如何用malloc申请动态内存一点儿小故事为什么要申请动态内存?申请一维动态内存(连续的)动态申请二维数组(连续的)示例例题拓展 一点儿小故事 你有没有像我一样曾经这样申请内存: int **a=(int **)...
  • 结构体中有int *number成员。...想将字符串中的内容转化为数值进行保存,由于字符串是手动输入的,所以想通过malloc()函数来进行内存申请,这样做可以吗?如果可以的话,程序总是停止运行,又是为什么?

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,960
精华内容 8,784
关键字:

malloc申请结构体空间