Ich versuche eine "Union-Find" zu machen.Kann kein komplexes 2D-Array zuweisen
Hier ist mein Code:
UnionFind uf_create(){
UnionFind uf= malloc(sizeof(UnionFind));
uf->vt=malloc(11*sizeof(VertexTree*));
uf->nbElems=VERTEX_MAX;
uf->nbGroups=VERTEX_MAX;
int i;
for(i=0;i<uf->nbElems;i++){
printf("%d\n", i);
uf->vt[i]->vtx=i+1;
uf->vt[i]->parent=uf->vt[i];
}
return uf;
}
Die UnionFind ist definiert durch:
typedef struct unionfind{
unsigned int nbElems;
unsigned int nbGroups;
VertexTree **vt;
}*UnionFind;
Und hier ist die Definition des Baumes:
typedef struct sTree{
GraphVertex vtx;
struct sTree* parent;
}VertexTree;
Ich weiß, die segfault ist weil der Baum nicht richtig zugeordnet ist. Kann mir bitte jemand sagen, wie man den Speicher für den Knotenbaum richtig zuordnet?
Dank
Zugriff 'UF-> vt [i] -> vtx' undefiniertes Verhalten verursacht. Sie sollten eine for-Schleife schreiben, die jedes vt [i] direkt nach uf-> nbGroups = ... initialisiert. – ddz
Das habe ich gerade gemacht, jetzt passiert der Segfault in der Zuweisungszeile ("uf-> vt [i] = malloc (sizeof (VertexTree));") – Elirovi
'für (i = 0; i <11; + + i) {uf-> vt [i] = malloc (Größe von ** uf-> vt); } 'gibt Ihnen segfault? – ddz