Warnung: X darf in dieser Funktion nicht initialisiert verwendet werden

Lesezeit: 2 Minuten

Benutzeravatar von Valentino Ru
Valentin Ru

Ich schreibe eine benutzerdefinierte “Vektor”-Struktur. Ich verstehe nicht, warum ich eine bekomme Warning: "one" may be used uninitialized hier.

Dies ist meine vector.h-Datei

#ifndef VECTOR_H
#define VECTOR_H

typedef struct Vector{
    int a;
    int b;
    int c;
}Vector;

#endif /* VECTOR_ */

Die Warnung erfolgt hier online one->a = 12

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include "vector.h"

int main(void){
    Vector* one;
    one->a = 12;
    one->b = 13;
    one->c = -11;
}

one wurde nicht zugewiesen, weist also auf einen unvorhersehbaren Ort hin. Sie sollten es entweder auf den Stapel legen:

Vector one;
one.a = 12;
one.b = 13;
one.c = -11

oder weisen Sie ihm dynamisch Speicher zu:

Vector* one = malloc(sizeof(*one))
one->a = 12;
one->b = 13;
one->c = -11
free(one);

Beachten Sie die Verwendung von free in diesem Fall. Im Allgemeinen benötigen Sie genau einen Anruf free für jeden getätigten Anruf malloc.

Benutzeravatar von Sergey Kalinichenko
Sergej Kalinitschenko

Sie erhalten die Warnung, weil Sie keinen Wert zugewiesen haben one, was ein Zeiger ist. Dies ist ein undefiniertes Verhalten.

Sie sollten es so deklarieren:

Vector* one = malloc(sizeof(Vector));

oder so:

Vector one;

in diesem Fall müssen Sie ersetzen -> Betreiber mit . so was:

one.a = 12;
one.b = 13;
one.c = -11;

Schließlich können Sie in C99 und höher verwenden ausgewiesene Initialisierer:

Vector one = {
   .a = 12
,  .b = 13
,  .c = -11
};

Benutzeravatar von Plaknas
plaknas

Wenn Sie verwenden Vector *one Sie erstellen lediglich einen Zeiger auf die Struktur, aber es wird ihr kein Speicher zugewiesen.

Einfach verwenden one = (Vector *)malloc(sizeof(Vector)); Speicher deklarieren und instanziieren.

Dies ist möglicherweise nicht die professionellste Lösung, aber anstatt sie zu initialisieren, verwenden Sie mallocSie können es auch mit initialisieren new:

Vector *one = new Vector();

Find ich persönlich eleganter.

1402380cookie-checkWarnung: X darf in dieser Funktion nicht initialisiert verwendet werden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy