使用 malloc 为结构分配内存,其中数据条目之一是指针
Memory allocation for struct using malloc where one of the data entries a pointer
我了解使用 malloc 为结构数组分配内存和为结构指针数组分配内存之间的区别。但是我想使用 malloc 为结构数组分配内存,以防结构本身包含指向另一个结构的指针。这是我要执行的操作的代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct linkedlist {
int pCol;
struct linkedlist *next;
} plist;
typedef struct particle {
int color;
double rad;
double rx;
double ry;
double vx;
double vy;
struct linkedlist *event;
} state;
int main()
{
int N = 5, w = 4;
plist *ls = (plist*)malloc((N+w)*sizeof(plist));
printf("N=%d, w=%d, sizeof state=%d, total=%d, sizeof discs=%d\n\n",
N,w,sizeof(plist), (N+w)*sizeof(plist), sizeof(ls));
state *discs = (state*)malloc((N+w)*sizeof(state));
printf("N=%d, w=%d, sizeof state=%d, total=%d, sizeof discs=%d\n",
N,w,sizeof(state), (N+w)*sizeof(state), sizeof(discs));
return 0;
}
当我运行这个时,我得到以下输出:
N=5, w=4, sizeof plist=8, total=72, sizof ls=4
N=5, w=4, sizeof state=56, total=504, sizof discs=4
所以,我想知道为什么 ls 或 discs 只分配了 4 个字节,我怎样才能获得为这些结构数组分配的总 内存?
您打印的是指针 (ls) 的大小,而不是指针 (*ls) 指向的 datatype/structrure 的大小。
如果您打算查找 plist
和 state
的大小,请在您的 printf 语句中执行 sizeof(*ls)
和 sizeof(*discs)
,因为那是 ls
和 discs
指向。
如果您正在考虑通过 malloc 打印分配给 ls
或 discs
的总大小。这是不可能的。它不会打印 ((N+w)*sizeof(plist))
。
所以即使做 sizeof(*ls)
也不会告诉你你分配了多少 plist
结构
在您的代码中,ls
是 plist *
类型,即指针。
sizeof()
是一个运算符,它 returns 数据类型的 大小 ,而不是分配的内存量。
discs
也是如此。
我了解使用 malloc 为结构数组分配内存和为结构指针数组分配内存之间的区别。但是我想使用 malloc 为结构数组分配内存,以防结构本身包含指向另一个结构的指针。这是我要执行的操作的代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct linkedlist {
int pCol;
struct linkedlist *next;
} plist;
typedef struct particle {
int color;
double rad;
double rx;
double ry;
double vx;
double vy;
struct linkedlist *event;
} state;
int main()
{
int N = 5, w = 4;
plist *ls = (plist*)malloc((N+w)*sizeof(plist));
printf("N=%d, w=%d, sizeof state=%d, total=%d, sizeof discs=%d\n\n",
N,w,sizeof(plist), (N+w)*sizeof(plist), sizeof(ls));
state *discs = (state*)malloc((N+w)*sizeof(state));
printf("N=%d, w=%d, sizeof state=%d, total=%d, sizeof discs=%d\n",
N,w,sizeof(state), (N+w)*sizeof(state), sizeof(discs));
return 0;
}
当我运行这个时,我得到以下输出:
N=5, w=4, sizeof plist=8, total=72, sizof ls=4
N=5, w=4, sizeof state=56, total=504, sizof discs=4
所以,我想知道为什么 ls 或 discs 只分配了 4 个字节,我怎样才能获得为这些结构数组分配的总 内存?
您打印的是指针 (ls) 的大小,而不是指针 (*ls) 指向的 datatype/structrure 的大小。
如果您打算查找 plist
和 state
的大小,请在您的 printf 语句中执行 sizeof(*ls)
和 sizeof(*discs)
,因为那是 ls
和 discs
指向。
如果您正在考虑通过 malloc 打印分配给 ls
或 discs
的总大小。这是不可能的。它不会打印 ((N+w)*sizeof(plist))
。
所以即使做 sizeof(*ls)
也不会告诉你你分配了多少 plist
结构
在您的代码中,ls
是 plist *
类型,即指针。
sizeof()
是一个运算符,它 returns 数据类型的 大小 ,而不是分配的内存量。
discs
也是如此。