it-source

경고: X는 이 기능에서 초기화되지 않은 상태로 사용될 수 있습니다.

criticalcode 2023. 7. 5. 20:47
반응형

경고: X는 이 기능에서 초기화되지 않은 상태로 사용될 수 있습니다.

맞춤형 "벡터" 구조를 작성하고 있습니다.제가 왜 이런 일을 당하는지 이해할 수 없습니다.Warning: "one" may be used uninitialized여기서.

이것은 나의 vector.h 파일입니다.

#ifndef VECTOR_H
#define VECTOR_H

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

#endif /* VECTOR_ */

경고는 여기 온라인에서 발생합니다.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지정되지 않았으므로 예측할 수 없는 위치에 점을 지정합니다.스택에 배치해야 합니다.

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

또는 메모리를 동적으로 할당합니다.

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

의 사용에 주의합니다.free이 경우에는일반적으로, 당신은 정확히 한 번의 전화가 필요할 것입니다.free전화가 올 때마다malloc.

다음에 값을 할당하지 않았기 때문에 경고가 표시됩니다.one그것은 포인터입니다.정의되지 않은 동작입니다.

다음과 같이 선언해야 합니다.

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

이런 식으로.

Vector one;

교체해야 하는 경우->와 교환하는 사람..다음과 같이:

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

마지막으로 C99 이상에서는 지정된 이니셜라이저를 사용할 수 있습니다.

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

사용할 때Vector *one구조에 대한 포인터를 만드는 것일 뿐 할당된 메모리가 없습니다.

간단히 사용one = (Vector *)malloc(sizeof(Vector));메모리를 선언하고 인스턴스화합니다.

이것은 가장 전문적인 솔루션은 아닐 수 있지만, 다음을 사용하여 초기화하는 대신malloc또한 다음을 사용하여 초기화할 수 있습니다.new:

Vector *one = new Vector();

저는 개인적으로 그것이 더 우아하다고 생각합니다.

언급URL : https://stackoverflow.com/questions/12958931/warning-x-may-be-used-uninitialized-in-this-function

반응형