이것은 쉽게 해결할 수 있습니다. 내가 뭘 잘못하고 있는지 잘 모르겠다.이 슈퍼 코드로 도울 수있다.배열을 채울 때 세그먼트 화 오류가 발생했습니다.
이 프로그램을 실행하면 배열의 5 개 값이 출력되고 세그먼트 오류가 발생합니다. 이 문제를 어떻게 해결할 지 잘 모르겠다. 도움이된다면 고맙습니다.
이것은 쉽게 해결할 수 있습니다. 내가 뭘 잘못하고 있는지 잘 모르겠다.이 슈퍼 코드로 도울 수있다.배열을 채울 때 세그먼트 화 오류가 발생했습니다.
이 프로그램을 실행하면 배열의 5 개 값이 출력되고 세그먼트 오류가 발생합니다. 이 문제를 어떻게 해결할 지 잘 모르겠다. 도움이된다면 고맙습니다.
arraysize
은 a
이 구성 될 때 지정 값이 없습니다. 즉, a
크기를 지정하는 데 정의되지 않은 동작이 호출되었습니다.
#include <iostream>
//Don't use "using namespace std;"!
//using namespace std;
int main()
{
//removed unused/unnecessary variables
int arraysize;
std::cout << "array size";
std::cin >> arraysize;
int a[arraysize];
for(int i = 0; i < arraysize; i++) {
int j = arraysize - i;
a[i] = j;
std::cout << "a[" << i << "] = " << a[i] << std::endl;
}
}
그러나이 :
이 코드의 비 정의되지 않은 동작 버전이 있습니다. 이와 같이 런타임에 배열 크기를 지정하는 것은 언어에 대한 비표준 확장이며 모든 환경에서 작동하지 않을 수도 있습니다. 이 코드가 표준을 따르도록하려면 std::vector
을 사용해야합니다.
#include <iostream>
#include <vector>
int main()
{
int arraysize;
std::cout << "array size";
std::cin >> arraysize;
std::vector<int> a(arraysize);
for(int i = 0; i < arraysize; i++) {
int j = arraysize - i;
a[i] = j;
std::cout << "a[" << i << "] = " << a[i] << std::endl;
}
}
난 당신의 코드, for these reasons에서 using namespace std;
의 사용을 제거했습니다.
솔직히 도움을 주셨습니다. 정말 고마워요. – theninja1011
이것은 분명히 정의되지 않은 동작입니다.
우선 C++ 표준은 가변 길이 배열을 지원하지 않습니다. 이것은 gcc와 같은 일부 컴파일러의 확장입니다.
배열을 인스턴스화 할 때 arraysize
의 두 번째 값은 정의되지 않으므로 결과가 예측할 수 없기 때문에 일부 경우에는 작동하지만 이는 순수한 행운을 기반으로합니다.
동적 크기 배열이 필요한 경우 std::vector
을 사용하는 것이 가장 좋습니다.
#include <iostream>
using namespace std;
int main()
{
int arraysize, i, n, j;
std::vector<int> a;
cout << "array size";
cin >> arraysize;
std::vector<int> a(arraysize);
for(int i=0, j = arraysize; i < arraysize, j > 0; i++, j--){
a[i] = j;
cout << "a[" << i << "] = " << a[i] << endl;
}
return 0;
}
'arraysize'는 배열'a [arraysize]'를 선언 할 때 가비지 값을 유지합니다. –
GCC와 함께 [http://coliru.stacked-crooked.com/a/301743aa2694a77a]를 재생산 할 수 없습니다. VLA를 사용하지 말고 VLA를 사용하기 전에 변수를 초기화하십시오. – Ron
@AditiRawat에 따르면,'arraysize'는 쓰레기가 처음 사용 된 지점에서 쓰레기를 저장합니다. 게다가'int a [arraysize]'는'arraysize'에 유효한 값이 있어도 C++이 유효하지 않습니다. 일부 컴파일러는 이것을 확장 기능으로 허용하지만 최소한 여러분이하고있는 일은 정결하지 않다는 경고를 주어야합니다. –