2012-08-16 3 views
2

삭제와 삭제의 차이점은 분명합니다. 내가 여기서 묻는 질문은 : 때때로 나는 오타를 사용하고 잘못된 것을 사용합니다. 그런 다음 크래시가 발생하거나 중단되지 않고 일반적으로 몇 시간의 디버깅으로 종료됩니다.[]의 삭제 또는 삭제의 오용을 경고하는 도구가 있습니까?

gcc가 몇 가지 간단한 경우에 발생할 수있는 오용을 감지하고 경고 할 수 있기를 바랍니다. 내가 필요로하는 레거시 함수 때문에 때때로 "new float [size]"를 사용해야하기 때문에 이러한 실수의 일부를 잡는 오류 검사 도구를 찾는 데 더 관심이 있습니다.

+2

당신은'부동 소수점 [를 사용할 필요가 없습니다 크기]'. 'std : array '또는'std :: vector '을 사용하십시오. – ecatmur

+3

하나의 도구 :'new []'을 사용하지 마십시오. 거의 모든 경우에서'벡터 '가 있습니다. –

+2

실행 파일에서 valgrind 사용 – PlasmaHH

답변

4

gcc가 몇 가지 간단한 경우에 발생할 수있는 오용을 감지하고 경고 할 수 있기를 바랍니다.

valgrind을 사용하십시오.

는 여전히 때문에 내가

아니, 그렇게하지를 호출 할 필요가 레거시 기능으로 수시로 new float[size]을 사용해야합니다. 이 작업을 수행하지 마십시오

std::vector<float> numbers(10); 
legacy_func(&numbers[0]); 

을 : 레거시 기능이 수레의 배열의 첫 번째 요소에 대한 포인터를 원하는 경우,이 작업을 수행

float *numbers = new float[10]; 
legacy_func(numbers); 
delete[] numbers; 
+5

현대 컴파일러를 사용한다면'numbers.data()'를 대신 사용하십시오. –

+0

numbers.data()가 마음에 들었습니다. 1 ~ 2 년 후 & numbers [0] (으)로 다시 변경해야했습니다. 때때로 그들은 오래된 컴파일러로 코드를 작성하기를 원합니다. – fchen

0

플로트를 std::vector<float>에 넣은 다음 front() 또는 &front()을 기존 기능에 전달할 수 있습니다. 이것이 표준에 의해 작동하는 것이 확실하지는 않지만 일반적인 구현에서 작동해야합니다. 당신이 C++ (11) 라이브러리 지원을하고 size은 컴파일 시간에 알려진 경우

std::array<float, size> 더 효율적입니다.

+0

크기가 컴파일 타임에 알려지면,'new'는 옵션이 아닙니다. –