我覺得我好像在一個陣列被分配爲每結構空間(查看每個結構的第一個元素的數組中的地址)自由造成賽格故障
我顯然使用不理解ç如何分配的東西... 的valgrind我看到的東西像
==9852== Use of uninitialised value of size 8
==9852== at 0x400740: main (Test.c:24)
這我迷茫了。我查看了一些關於數組,結構和分配的文章,但似乎無法看到正在發生的事情的微妙之處。
我還發現令人費解的是,除了自由之外,一切都可以正常工作,例如打印數組值顯示預期結果。分配給未分配(NULL)內存或分配的(可能)的大小外,當我可以理解一個賽格故障,但不明白是怎麼回事了免費
// Vector3.h
#include <stdio.h>
typedef struct {
double x,y,z;
} Vector3;
void Vector3Print(Vector3 v);
// Vector3.c
#include "Vector3.h"
void Vector3Print(Vector3 v) {
printf("%f, %f, %f\n", v.x, v.y, v.z);
}
// Mesh.h
#include "Vector3.h"
typedef struct {
Vector3 position;
Vector3 rotation;
Vector3* Vertices;
} Mesh;
void MeshAllocate(Mesh mesh, int size);
void MeshRelease(Mesh mesh);
// Mesh.c
#include <stdlib.h>
#include "Mesh.h"
void MeshAllocate(Mesh mesh, int size) { // size in verts
mesh.Vertices = malloc(size * sizeof(Vector3));
if (mesh.Vertices==NULL) {
printf("Error allocating memory!\n");
}
}
void MeshRelease(Mesh mesh) {
free(mesh.Vertices);
}
// test.c
// gcc -g -std=c99 *.c -o test
#include "Mesh.h"
int main() {
Mesh mesh;
printf("sizeof double %lu\n",sizeof(double));
printf("sizeof Vector3 %lu\n",sizeof(Vector3));
MeshAllocate(mesh,3);
printf("address v0.x %lu\n",(unsigned long)&mesh.Vertices[0].x);
printf("address v0.y %lu\n",(unsigned long)&mesh.Vertices[0].y);
printf("address v0.z %lu\n",(unsigned long)&mesh.Vertices[0].z);
printf("address v1.x %lu\n",(unsigned long)&mesh.Vertices[1].x);
mesh.Vertices[0] = (Vector3){0.1,2.3,4.5};
mesh.Vertices[1] = (Vector3){6.7,8.9,10.11};
mesh.Vertices[2] = (Vector3){12.13,14.15,16.17};
for (int i=0; i<3; i++) {
Vector3Print(mesh.Vertices[i]);
}
MeshRelease(mesh);
}
你的內存溢出和腐敗。 '免費'只是檢測到這一點。 –