Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Warning: X may be used uninitialized in this function

Tags:

c

warnings

I am writing a custom "vector" struct. I do not understand why I'm getting a Warning: "one" may be used uninitialized here.

This is my vector.h file

#ifndef VECTOR_H #define VECTOR_H  typedef struct Vector{     int a;     int b;     int c; }Vector;  #endif /* VECTOR_ */ 

The warning happens here on line 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; } 
like image 339
Valentino Ru Avatar asked Oct 18 '12 16:10

Valentino Ru


1 Answers

one has not been assigned so points to an unpredictable location. You should either place it on the stack:

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

or dynamically allocate memory for it:

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

Note the use of free in this case. In general, you'll need exactly one call to free for each call made to malloc.

like image 51
simonc Avatar answered Sep 20 '22 14:09

simonc