Ich verwende Malloc, um ein Array von Zeigern zu erstellen. Wie auch immer, ich erhalte den Valgrind-bedingten Sprung oder die Bewegung hängt von nicht initialisierten Werten ab, wenn ich versuche, auf etwas in einem der Indizes im Array zu verweisen. In meinem Code wird manchmal etwas im Index [] gespeichert sein und manchmal nicht. Zum Beispiel könnte ein Zeiger auf den Wert 1, 4, 6 .. aber nicht in einem der anderen gespeichert sein. Mein Ziel ist es, dies ohne Valgrind-Fehler feststellen zu können!Malloc Array, bedingter Sprung bei nicht initialisierten Werten
typedef struct{
char* symbol;
void* datapointer;
void* nextstruct;
}Entry;
void main(){
int sizeHint = 10000; //size of array
Entry** arrayOfPointers = malloc(sizeHint * sizeof(Entry*));
//For the sake of keeping this simple, say I stored something
//in a bunch of indexes in the array but NOT at 5
if(arrayOfPointers[5] != NULL){
//this is where my error comes, as it reads
//conditional jump or move depends on uninitilised value
//my goal is to be able to determine if something is stored at an index, and
//do something if its not stored
}
}
Sie sollten stattdessen 'calloc()' verwenden: es führt die Multiplikation für Sie aus, überprüft auf Überlauf und initialisiert den Speicher auf Null. –
@ JonathonReinhart: Der aktuelle C-Standard schreibt nicht vor, dass ein Bitmuster aller '0' eine Zeigervariable gleich dem Nullzeiger machen würde: http://stackoverflow.com/questions/42471057/malloc-array-conditional -jump-on-uninitialized-values / 42471123 # comment72082868_42471123 – alk