requerido - Advertencia: X puede usarse sin inicializar en esta función
mi disco duro externo esta sin inicializar (3)
Cuando usa Vector *one
, simplemente está creando un puntero a la estructura pero no hay memoria asignada a ella.
Simplemente use one = (Vector *)malloc(sizeof(Vector));
Declarar la memoria y crear una instancia de ella.
Estoy escribiendo una estructura de "vector" personalizada. No entiendo por qué recibo una Warning: "one" may be used uninitialized
aquí.
Este es mi archivo vector.h
#ifndef VECTOR_H
#define VECTOR_H
typedef struct Vector{
int a;
int b;
int c;
}Vector;
#endif /* VECTOR_ */
La advertencia sucede aquí en la línea 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;
}
Recibe la advertencia porque no asignó un valor a one
, que es un puntero. Este es un comportamiento indefinido.
Deberías declararlo así:
Vector* one = malloc(sizeof(Vector));
o así:
Vector one;
en cuyo caso es necesario reemplazar ->
operador con .
Me gusta esto:
one.a = 12;
one.b = 13;
one.c = -11;
Finalmente, en C99 y posteriores puede usar los inicializadores designados :
Vector one = {
.a = 12
, .b = 13
, .c = -11
};
one
no ha sido asignado, por lo que apunta a una ubicación impredecible. Deberías colocarlo en la pila:
Vector one;
one.a = 12;
one.b = 13;
one.c = -11
o asigna memoria dinámicamente para ello:
Vector* one = malloc(sizeof(*one))
one->a = 12;
one->b = 13;
one->c = -11
free(one);
Tenga en cuenta el uso de free
en este caso. En general, necesitará exactamente una llamada free
para cada llamada realizada a malloc
.