포인터 :초기화되지 않은 값 - 나는 현재 내 프로그램을 확인 Valgrind의를 사용하고, 소정의 시험 프로그램은 나에게 내가 이해할 수없는 오류가 준
int size=10;
int i;
float * v1;
v1=new float[size];
float v2[size];
for (i=0;i<size;i++) v1[i]=0;
for (i=0;i<size;i++) v2[i]=0;
v1[0]=1;
v2[0]=1;
v2에서 잘 작동하지만 V1은 조건부 점프를 제공을 또는 이동은 valgrind에서 초기화되지 않은 값 오류에 달려 있습니다.
왜 이런 일이 발생합니까? 또한 위의 v2 에서처럼 배열을 사용하는 것이 가장 좋은 방법입니까 아니면 동일하게 사용합니까?
미리 감사드립니다. 편집
은 : 코드의 나머지 부분을 추가 - 오류가
v1=new float[size];
for (i=0;i<size;i++) v1[i]=0;
v1[0]=1;
valgrind는 모든 경우에 스택 할당 메모리를 추적하지 않습니다. v2에서 동일한 오류가 발생할 수 있지만 valgrind는이를보고 할 수 없습니다. 또한 valgrind 출력과 valgrind가 불평하는 코드 행을 표시하십시오. valgrind는 여기 몇 줄의 코드에 대해 불평해서는 안되기 때문에 더 많은 코드가 있습니다. – nos
초기화되지 않은 변수가 _error_를주는 이유는 무엇입니까? –
'v1 []'의 * member * (그리고 아마도'v2 []'와 마찬가지로 nos가 초기화됩니다)는 초기화되지 않았습니다. 'v1 = new float [size] = {0.0};'또는 유사하게 사용하십시오. Valgrind가 당신의 논리에 대해 옳고 그곳에 숨겨져있는 더 깊은 버그를 가지고있을 가능성이 높기 때문에'v1 []'을 읽는'물건을 만드십시오. ' – Jeff