通常、関数内の配列のスコープで終わります。しかし、もし私が事前に割り当てると、それは完全に配列を返します。では、配列の割り当てと配列の宣言の違いは何ですか? 私はコードと私が混乱している場所を書いています。最初の宣言などの動的なメモリ割り当てが原因ですか?誰かが丁寧に説明できますか?特定のサイズの配列の割り当てとcppの特定のサイズの配列の宣言との違いは何ですか?
#include <bits/stdc++.h>
#define N 10
using namespace std;
int * get_array() {
int * p = new int[N];
//|--- by declaring like this, the array was perfectly returned.
int p[N];
//|--- but is case of this declaration the array returned showed garbage value in the main function.
for(int i = 0; i < N; ++i) p[i] = i;
return p;
}
int main(int argc, char const *argv[])
{
int * M = get_array();
for (int i = 0; i < N; ++i) {
cout << M[i] << endl;
}
return 0;
}
スタックにポインタを戻していますランタイムクラッシュポインタ/ローカル変数への参照(スタック上) –
また、これらのエラーを捕捉するのに役立つように '-Wall -Werror'でコンパイルすることを検討してください。 – Ahmad
@Shaikh Islam 2番目のケースでは、返されたポインタは、存在しないオブジェクトを指しているため無効です。最初のケースで –