Im Im Konstruieren einer Vertex-Bibliothek in C zu verwenden, und aus irgendeinem Grund bekomme ich eine Segmentation Fault. Im gehend, zuerst den Code zu zeigen und fragen Frage:Segmentation Fault, und wie Unions für Typen
Vertex.h:
#ifndef _VERTEX_AM_H_LB
#define _VERTEX_AM_H_LB 1
#pragma once
#include<stdint.h>
/**
* Vertex Library C
*
* GCC C99 <Vertex.h>
*
* @author Amanuel Bogale
* @copyright 2016 Amanuel Bogale
* @license http://www.opensource.org/licenses/mit-license.html MIT License
*
*/
//@union for storing
//data types supported
//for vertex
typedef union
{
char ch; //1 byte
unsigned char uch;//1 byte
signed char sch;// 1 byte
int in;//2 or 4bytes
unsigned int uin;//2 or 4bytes
long ln;// 4byte
unsigned long uln; //4byte
long long lnln; //8byte
short sh;// 2byte
unsigned short ush; //2bytes
float fl;//4byte
double db; //8byte
long double ldb; //10byte
}type;
/*
* @struct for defining
* vertex. Initalize First
*/
struct vertex_am
{
size_t current_size;
type type;
long long size_contents;
void **contents; //Array Of Void Pointers
//Add to the end of array
void (*add)(struct vertex_am *self,void*val);
};
typedef struct vertex_am vertex_am;
vertex_am* init_vertex(size_t size, vertex_am* vertex);
void end_vertex(vertex_am* vertex);
long long get_elements_num(vertex_am vert);
void add_end(vertex_am vert, void* val);
void* get_val(vertex_am vert,long long index);
#endif
Vertex.c:
#include<stdlib.h>
#include<stdio.h>
#include "../includes/Vertex.h"
/**
* Vertex Library C
*
* GCC C99 <Vertex.c>
*
* @author Amanuel Bogale
* @copyright 2016 Amanuel Bogale
* @license http://www.opensource.org/licenses/mit-license.html MIT License
*
*/
vertex_am* init_vertex(size_t size, vertex_am* vertex)
{
vertex = malloc(size);
vertex->current_size = size;
vertex->size_contents = 0;
return vertex;
}
long long get_elements_num(vertex_am vert)
{
return(vert.size_contents);
}
void add_end(vertex_am vert, void* val)
{
vert.contents[vert.size_contents] = val;
vert.size_contents++;
}
void* get_val(vertex_am vert,long long index)
{
return (vert.contents[index]);
}
void end_vertex(vertex_am* vertex)
{
free(vertex);
}
main.c:
#include<stdlib.h>
#include<stdio.h>
#include<stdint.h>
#include "includes/Vertex.h"
int main()
{
printf("In");
vertex_am *vert = NULL;
vert = init_vertex(sizeof(*vert), vert);
add_end(*vert,(void *)34);
// printf ("%d", *((int*)get_val(*vert, 0)));
end_vertex(vert);
return 0;
}
Makefile:
C = gcc
TARGETS = main
SUB_TARGETS = sources/Vertex.c
CFLAGS = -Wall -g -std=c99 -pthread -Werror -o exec -g -Q -O0
all: clean $(TARGETS)
$(TARGETS):
$(C) $(CFLAGS) [email protected] $(SUB_TARGETS) -o [email protected]
clean:
rm -f $(TARGETS)
Ok ich habe paar Fragen.
- Ich habe eine Segmentierung oben Fehler. Und ich kann nicht finden, wo es ist. Hilfe Bitte
- Alle Segmentation Fault Debugger für gcc und Linux Umgebung
- Wie würde ich gehen über die Verwendung von Gewerkschaften zu manuplizieren Typen. Damit meine ich wie diese vector_am vec. Wie würde ich gehen, also bekomme ich, was der Benutzer will, als ein Typ mit Union. Oder ist die Leere * schon eine bessere Idee?
Hilfe wäre willkommen. Danke fürs Lesen.
Ich habe keine Ahnung, was der Code tun soll und ich habe keine Ahnung, was Sie in (3) fragen. –
I litterarly sagte, es ist eine Vertex-Bibliothek. Das bedeutet, ich mache meine eigene "Klasse" für Dynamic Array. – amanuel2
Niemand weiß, was "Vertex-Bibliothek" für * Sie * bedeutet. Sie sollten das Verhalten beschreiben, anstatt von uns zu verlangen, Ihren Code zurückzuentwickeln. –