경고: 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
'it-source' 카테고리의 다른 글
패싯 라벨을 변경하는 방법? (0) | 2023.07.05 |
---|---|
Oracle 디렉토리 경로를 검색하는 방법은 무엇입니까? (0) | 2023.07.05 |
Git를 사용하여 여러 작업 디렉토리를 가질 수 있는 방법은 무엇입니까? (0) | 2023.07.05 |
sql developer를 이용한 대용량 데이터 내보내기 방법 - Oracle (0) | 2023.07.05 |
RAISERROR()의 구문 의미는 무엇입니까? (0) | 2023.07.05 |