关于这几个问题论坛上已经有比较详细的文章,这里主要描述一些遇到的问题,并附上链接。
一、结构体内存对齐
例如采用数组的形式顺序存储线性表时,以下两种表示都可以:
typedef struct LNode *List;
struct LNode{
ElementType Data[MAXSIZE];
int Last;
};
typedef struct LNode *List;
struct LNode{
ElementType *Data;
int last;
};
他们在初始化的时候会略有不同,第一种结构体的内存空间中就包括这个数组,而第二种,结构体内只是一个指针,在初始化线性表时要再给这个指针指向的数组申请内存空间。
List MakeEmptyList(){
List PtrL;
PtrL = (List)malloc(sizeof(LNode));
PtrL->Last = -1;
return PtrL;
}
List MakeEmptyList(int MaxSize){
List PtrL;
PtrL = (List)malloc(sizeof(LNode));
PtrL->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType));
PtrL->Last = -1;
return PtrL;
}
那这里就有个问题,这两种结构体分别是申请了多大的空间?假设我们这里的ElementType是double型的,对于第一个定义中Maxsize为2。
#include<stdlib.h>
#include<iostream>
using namespace std;
#define MAXSIZE 2
typedef struct LNode *List;
struct LNode{
double Data[MAXSIZE];
int Last;
};
// typedef struct LNode *List;

本文探讨了C语言中结构体的内存对齐规则,以实例解释了为何在64位系统上,包含数组的结构体占用的空间大于预期。同时,文章介绍了动态内存管理函数`malloc`的使用,强调了检查分配内存成功和释放内存以避免内存泄漏的重要性。此外,文章还讨论了指针作为参数传递的细节,包括普通变量、数组和链表节点的指针传递方式及其注意事项。
3484

被折叠的 条评论
为什么被折叠?



