struct-关于结构体指针malloc不够的问题,求教!

问题描述

关于结构体指针malloc不够的问题,求教!

定义了一个结构体类型:
typedef struct _tag_str{

  char * first;
        short  second;

}str ,*pstr;

然后再定义一个结构体
typedef struct _tag_str1{
pstr first;
float second;
}str1,*pstr1;

定义一个变量 pstr1 strr;

在对strr初始化:strr=(pstr1)malloc(sizeof(str1)), 这样其实malloc的空间大小只是一个
float的大小和一个指针变量的大小,并不是两个结构体合起来的大小,这时我为了初始化
strr->first这个结构体指针 做这样的操作:strr->first=(pstr)malloc(sizeof(str));又开
辟一个空间,现在的烦恼是既然strr的位于first的地方头一回空间开辟的只是一个指针的大小,那么第二回在这个地方又开辟了一个sizeof(str)大小的空间,这样做是不是超出了第一次开辟的空间,还是两个空间在内存中本来就是两个地方?假如把第二个结构体中的第一个变量换成str first就不存在这样的疑问了,因为第一次malloc的时候一次把空间申请够了。

解决方案

第二个struct里面本来就是一个指针变量和一个float变量,sizeof的时候就只有一个指针变量的长度+一个float变量的长度,所以这个指针还是一个空指针(也可能是野指针),所以自然要再申请一个第一个struct,他们的内存自然是两块地方,至于说连不连续就不一定了

解决方案二:

关于结构体指针问题
有关结构体中的指针问题
结构体指针问题

解决方案三:

指针变量存的是地址。。。地址。。。地址。。。

解决方案四:

strr->first是一个指针变量,里面存放的是地址。把第二次开辟的空间地址存在了strr->first,这两次开辟的空间是不同的。

解决方案五:

strr->first是一个指针变量,里面存放的是地址。把第二次开辟的空间地址存在了strr->first,这两次开辟的空间是不同的。

时间: 2024-08-04 08:53:36

struct-关于结构体指针malloc不够的问题,求教!的相关文章

C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表本文由 arthinking 发表于315 天前 ⁄ itzhai.com原创文章 ⁄ C语言 ⁄ 评论数 3 ⁄ 被围观 1,775 views+   指针数组: 在一个数组中,如果它的元素全部都是指针

C++结构体指针声明问题。

问题描述 C++结构体指针声明问题. typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt;} MSG *PMSG NEAR *NPMSG FAR *LPMSG;static PMSG pmsg ;pmsg = (PMSG)malloc (cLinesMax * sizeof (MSG)) ; for (i = cLinesMax - 1 ; i >

调试-求大神~~ c free()结构体指针出错

问题描述 求大神~~ c free()结构体指针出错 本人菜鸟一枚,调试程序时发现下面的程序只要用free()来释放结构体指针就出错,百思不得其解,望大师指正!非常感谢啦! 注:本人用的是VC6.0.自己写的C程序,私心揣测难道是结构体指针特殊一点,或者我释放的方式不对~ 补充:C-Free 5.0上选择mingw5调试则没有问题!到底哪里有问题? #include <stdio.h> #include <stdlib.h> #include <malloc.h> st

c语言-C语言求助!!!写了一个返回结构体指针的函数,编译时总是提醒没有初始化q,但是初始化了。

问题描述 C语言求助!!!写了一个返回结构体指针的函数,编译时总是提醒没有初始化q,但是初始化了. 下面是源码下载:http://pan.baidu.com/s/1dDhplwH 程序是用C语言写的,VS2013编译. 这是其中使用结构体的定义 这是哈夫曼函数的定义 解决方案 创建的时候可以 -- ,*q = NULL; malloc 之后 memset(q, 0 , sizeof(--)): 解决方案二: 创建的时候可以 -- ,*q = NULL; malloc 之后 memset(q, 0

c程序设计-C语言截结构体指针中的变量又是另一个结构体指针,怎么用,代码运行不了

问题描述 C语言截结构体指针中的变量又是另一个结构体指针,怎么用,代码运行不了 #include #include #include #include #define LIST_INIT_SIZE 100//线性表存储空间的初始分配量 #define LISTINCREMENT 10//线性表存储空间的分配增量 typedef struct { int No; char name[10]; }Student; typedef struct { Student *elem;//存储空间基址 int

c 指针-C语言 结构体指针字符 二进制文件写入和读取 指针字符输出错误

问题描述 C语言 结构体指针字符 二进制文件写入和读取 指针字符输出错误 typedef struct s{ char *name; }student; /*将结构体读出并显示*/ int IsUsed(char str) { FILE *fp = fopen("test","rb"); student s; s.name = (char) malloc(sizeof(char)*20); fread(&s,sizeof(student),1,fp); wh

结构体指针之 段错误 详解(精典!!!)

一个网友问了我一个问题,一个C程序运行出现了段错误,这个问题非常好,很多初学者都容易犯这个错误,具体代码如下: 这个编译没有问题,但是运行是段错误    Segmentation fault 因为你定义了一个结构体指针p,用来指向此类结构体,但是你却没有给他赋值,此时p的值为NULL,你并没有在内存中为p分配任何空间,所以p->a=1这句就会出段错误. 修改方法1:可以给p分配一段内存空间,并使其指向此空间: p=(struct abc *)malloc(sizeof(struct abc));

编译出错-用push_back函数将数存入结构体指针向量中编译不出错,运行的时候出不来!

问题描述 用push_back函数将数存入结构体指针向量中编译不出错,运行的时候出不来! #include #include #include using namespace std; typedef struct person { string name; vector length; }person,*person_List; int main() { int number; person_List p; person p1; p = (person_List)malloc(sizeof(p

结构体指针初始化问题

问题描述 结构体指针初始化问题 定义一个队列结构体,想用init方法初始化一个该结构体的指针,testQueue1和testQueue2两种方法都有问题.Queue内部的front和rear指针无法初始化. 但如果是在主程序或者testQueue函数中用malloc初始化,却是可以的. main程序如下: #include "Queue.h" void testQueue1(); void testQueue2(); void testQueue3(); int main() { pr