pch*_*hot 2 c memory free struct
我正在创建简单的粒子系统.我有两个typedef结构.首先表示具有一些字段的单个粒子.第二个代表粒子系统.我的问题是我无法释放为每个粒子分配的内存.真的不知道出了什么问题.这是结构:
typedef struct {
float m;
float *x;
float *v;
float *f;
float R;
} *Particle;
typedef struct {
Particle *p;
int n;
float t;
} *ParticleSystem;
Run Code Online (Sandbox Code Playgroud)
这里是分配代码
ParticleSystem sys = (ParticleSystem) malloc(sizeof(ParticleSystem));
sys->p = (Particle *) malloc(sizeof(Particle)*noOfParticles);
for(int i=0;i<noOfParticles;i++){
sys->p[i] = (Particle)malloc(sizeof(Particle));
sys->p[i]->f = (float*)malloc(sizeof(float)*2);
sys->p[i]->f[0] = 0.0f;
sys->p[i]->f[1] = 0.0f;
...
sys->p[i]->R = radius;
sys->p[i]->m = mass;
}
sys->n=noOfParticles;
sys->t = 0.0f;
Run Code Online (Sandbox Code Playgroud)
和释放
int n = sys->n;
for(int i=0;i<n;i++){
free(sys->p[i]->f);
...
free(sys->p[i]);//here it breaks
}
free(sys->p);
free(sys);
Run Code Online (Sandbox Code Playgroud)
在行"free(sys-> p [i])它断开.我不知道为什么,因为首先我做这个
sys-> p [i] =(Particle)malloc(sizeof(Particle))来分配. Studio说"HEAP [template.exe]:为RtlValidateHeap(01E70000,01E749B0)指定的无效地址Windows已在template.exe中触发了断点."
自从我完成C/C++编程以来已经有一段时间了,但是那些typedef是不是声明Particle
为指向该结构ParticleSystem
的类型,并且是指向其他结构的指针类型?如果是这样,当你分配内存时,你只需要分配足够的内存来保存指针,而不是实际的结构.
例如:
#include <iostream>
using namespace std;
typedef struct {
float m;
float *x;
float *v;
float *f;
float R;
} *Particle;
typedef struct {
Particle *p;
int n;
float t;
} *ParticleSystem;
int main()
{
cout << "sizeof(Particle) = " << sizeof(Particle) << endl;
cout << "sizeof(ParticleSystem) = " << sizeof(ParticleSystem) << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行该程序时,我得到:
sizeof(Particle) = 4
sizeof(ParticleSystem) = 4
Run Code Online (Sandbox Code Playgroud)