大家帮我看下这个C语言结构体分配空间的问题好么~

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大家帮我看下这个C语言结构体分配空间的问题好么~相关的知识,希望对你有一定的参考价值。

#include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define MAXLEN 100 #define MAXSIZE 50 typedef int Status; typedef struct ResultType int CmdNo; //命令号或命令符 int s[3]; //命令的串参数的内部名(最多3) int num[2]; //命令的数值参数(最多2个)ResultType,*Result ; typedef struct char * ch; //若为非空串,则按串长分配存储区,否则ch为NULL int length; //串长度 int state; //状态量HString,*String; typedef struct HString StrHead[100]; //串头数组 int CurNum; //系统中现有的串的数目StrHeadList,*StrHead; //*采用顺序存储结构 StrHeadList *H; HString *K; //定义StrHead类型的全局变量H Status get(int s,char d[100]); Status sys(Result p); int main() char c;int i; ResultType *p; printf("Overfolw1!\n");getchar(); if(!(K=(String)malloc(sizeof(HString)))) printf("Overfolw2!\n");getchar(); printf("Overfolw3!\n");getchar(); if(!(H=(StrHead )malloc(sizeof(StrHeadList))))printf("Overfolw4!\n");getchar(); //申请H的空间 for(i=0;i<=100;i++) H->StrHead[i].ch=NULL; H->StrHead[i].length=0; H->StrHead[i].state=0; //初始化H的数值 H->CurNum=0; printf("Overfolw5!\n");getchar(); p=(Result )malloc(sizeof(ResultType)); printf("Overfolw6!\n");getchar(); printf("================================================\n"); printf("============欢迎使用串操作系统V 1.002===========\n"); Status get(p->s[0]); scanf("%c",&c); getchar(); switch(c) case'A':sys(p);break; case'C': break; default: printf("指令不在范围内,请重新输入!\n"); break; //switch free(K);free(H);free(p); return 1; //main Status sys(Result p) char s1[100],s2[50]; int i,j,n,m; //定义局部变量 do printf("请进行操作:\n"); m=0; gets(s1); switch(s1[m]) //判断指令类型 case'A':get(p->s[0],s1); break; //case A default: printf("输入错误!\n"); //switch while(s1[0]!='Q');//do-while return 1; //sys Status get(int n,char s1[100])//将串值赋入串头表中 char s[50]; while(H->StrHead[H->CurNum].state==1) H->CurNum++;//寻找新的空结点 n=H->CurNum++; int i,j,m=0; m++; while(s1[m]==' ') m++; //s1为从键盘接收到的字符串,s1,m为局部变量,在getorder()函数内有效,减少需要传递的参数 if(s1[m]=='\'') i=0; m++; while(s1[m]!='\'') s[i++]=s1[m++]; //if if(!(H->StrHead[n].ch=(char *)malloc(i*sizeof (char)))) exit(OVERFLOW); H->StrHead[n].length=i; for(j=0;j<=i;j++) H->StrHead[n].ch[j]=s[j]; printf("新串的内部名和串值为:\n"); printf("%5d ",n); printf("%s\n",H->StrHead[n]); //回显新串 return 1; //get p=(Result )malloc(sizeof(ResultType)); 运行到此处不定时死循环?

参考技术A 我调试了一下你的程序,因为不知道要实现什么功能,所以不太好进行。发现了一些漏洞,简述如下:
1.
main()函数中,for循环的设置,应该从
for(i=0;i<=100;i++)
改为
for(i=0;i<100;i++)
,否则必然出现溢出,导致异常情况发生,你说的“不定时死循环”可能因此产生。
2.
main()函数中,这一句
Status
get(p->s[0]);
没有任何作用,可以注释掉。
3.
get()函数中,i在if语句中才给与赋值,当if语句判断后不执行i赋值的时候,程序执行到这里的时候:
if(!(H->StrHead[n].ch=(char
*)malloc(i*sizeof
(char))))
exit(OVERFLOW);
i的值是未知的,可能会是个天文数字,直接导致分配空间失败。
楼主参考参考改改程序,如果还有问题,hi我。
祝你好运!

c语言中,系统为结构类型变量所分配的内存空间大小如何确定?

看下内存对齐的知识你就明白了。
“成员占的大小加起来就是结构的大小”这种说法是不正确。
内存对齐:http://baike.baidu.com/view/4786260.htm
参考技术A 有结构的成员决定。成员占的大小加起来就是结构的大小。 参考技术B 这个是由编译器决定的,不过大部分都是一样的。

以上是关于大家帮我看下这个C语言结构体分配空间的问题好么~的主要内容,如果未能解决你的问题,请参考以下文章

请问这张C语言的PPT里面的短数据长变量的赋值我不懂,谁帮我看下?

C语言结构体数组 的输入方式

C++结构体指针数组如何分配空间,用new

一个c语言表示的数据结构的问题,请帮我看一下

C语言结构体占用字节数及存储与空间分配

C语言结构体中冒号的作用——位域