Ich habe eine Struktur wie dieseUngültige Schreib der Größe 8 valgrind auch für NULL Zuordnung
struct chromosome
{
float fitness; /** Fitness of the chromosome. i.e Value calucated by
fitness function */
char *genes; /** Genes of the chromosome */
struct meta_chromosome *meta_chromosome; /** Pointer to the meta_chromosome structure */
};
Ich versuche, eine Instanz der Struktur zu schaffen, wie diese
/*
* Allocates memory fore the chromosome and related objects
*/
struct chromosome *
create_chromosome(struct meta_chromosome *meta_chromosome)
{
struct chromosome *chromosome = NULL;
chromosome = malloc(sizeof(chromosome));
chromosome->genes = NULL;
chromosome->genes = malloc((meta_chromosome->len + 1) * sizeof(char));
chromosome->meta_chromosome = meta_chromosome;
return chromosome;
}
Aber wenn ich es bin kompilieren und laufen valgrind ich erhalte diesen Fehler
Invalid write of size 8
==3584== at 0x400856: create_chromosome (chromosome.c:54)
==3584== by 0x4008A5: gen_random_chromosome (chromosome.c:68)
==3584== by 0x400FA0: init_rand_population (genetic_algorithm.c:177)
==3584== by 0x40115E: main (main.c:47)
==3584== Address 0x52021a8 is 0 bytes after a block of size 8 alloc'd
==3584== at 0x4C2BBCF: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
Was das Problem sein könnte
Benennen Sie Ihre Instanzvariable nicht mit dem Namen Ihrer Struktur, dies maskiert den Fehler, wo Sie die Größe des Zeigers malloc sind, nicht die Größe der Struktur – KevinDTimm
Es besteht keine Notwendigkeit Wirf 'NULL' nach' char * '. – ameyCU
Es wäre schön, wenn Sie uns sagen würden, welcher Zeile 54 tatsächlich entspricht. Vielleicht möchten Sie dies in der Zukunft lesen, um Ihr Problem zu reproduzieren, müssten wir unser eigenes Programm schreiben: https://stackoverflow.com/help/mcve – Taywee