Я понимаю разницу между распределением памяти с помощью malloc для массива struct и массива указателей на struct. Но я хочу назначить память с помощью malloc для массива struct, в том случае, если сама структура содержит указатель на другую структуру. Вот код для того, что я пытаюсь сделать:Распределение памяти для структуры с использованием 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
Итак, я хочу знать, почему низкоспиновое или диски получить назначено только 4 байта и как я могу получить всего памяти, необходимой для этих массивов структур?
Общая память, необходимая для указателя *, составляет * 4 байта (или 8 или 2, в зависимости от платформы). Подумайте об этом на минуту ... это * указывает * на что-то, а не на * что-то. ;-) – DevSolar
'ls' и' discs' имеют тип указателя, размер которого 4 байта в 32-битных системах. – Rohan