私はテストを行っていましたが、セグメンテーションエラーが表示されていました。詳細はなく、混乱しています。しかし、の配列はここで動作しません。なぜなら、デバッグ時には、配列を取り出す/印刷しようとするまで、すべてが問題ないからです。それはここで粉砕され、壊れていると報告している。それが壊れると私はここで何もすることができず、休憩したり続ける。私が続けるとうまくいく。私は本当に混乱しました。動的に割り当てられた配列を逆転させるプログラムのセグメンテーションフォルト
私のコンピュータはWindows 7です。私はvisual studio 2010 C++でコードを実行します。 デバッグは問題を解決するためにはっきりしていません。私は非常に効率的ではないC++を学んでいます。 アレイは動的割り当てが必要です。
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
void reverseArray(int size, int num[]) {
if(size>1) {
int *p = &num[size-1];
int *f = num;
for(int i = 0;i < size/2; i++){
swap(*p, *f);
p--;
f++;
}
}
}
int main() {
int len;
int a[len];/This is the bug, can't use uninitialized var assign array/
cin >> len;
for(int i = 0; i < len; i++){
cin >> a[i];
}
reverseArray(len, a);
for(int i = 0; i < len; i++){
cout << a[i] << " ";
}
return 0;
}
これは動的割り当てには何かがあります。私がJavaで作業するときは、新しい配列を作成します。 私は、私はとても幸せれ、この問題が解決され、
int[] newArray = {2,4,1,2,3};
または最後に
int[] newArray = new int[] {2,4,1,2,3};
に持っています。 読み書きは非常に重要です。コーディングも重要です。 ありがとうございました。
の代わりに、配列を使用しています。 これは簡単でしょう。
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;
int main() {
int a;
int len;
vector<int> myvector;
cin >> len;
for(int i = 0; i < len; i++){
cin >> a;
myvector.push_back(a);
}
reverse(myvector.begin(), myvector.end());
for(int i = 0; i < len; i++){
cout << myvector[i] << " ";
}
return 0;
}
再びアレイを使う(は、私は次のコード疑う):
#include<iostream>
//#include<cstdlib>
using namespace std;
void reverseArray(int size, int nums[]){
if(size > 1){
int *p = &nums[size-1];
int *q = nums;
for(int i = 0; i< size/2; i++){
swap(*p, *q);
p--;
q++;
}
}
}
int main(){
int len;
cin >> len;
int *a = new int[len];//a point to the first ele.
for(int i = 0; i< len; i++){
cin >> a[i];
}
reverseArray(len, a);
for(int i = 0; i < len; i++){
cout << a[i] << " ";
}
delete [] a;
return 0;
}
それはポインタであるため、混乱して私のラップトップ上で完璧に働いたが、私は次のようにそれを使用しますアレイ。それは動作してはならない......
ファイナルアレイのバージョン: http://ideone.com/ZMsD35 完了しました。
#include<iostream>
using namespace std;
int main(){
int len;
cin >> len;
int *a = new int[len];
for(int i = 0; i< len; i++){
cin >> a[i];
}
reverse(a, a+len);
for(int i = 0; i< len; i++){
cout << a[i];
}
delete [] a;
system("pause");
return 0;
}
コメントが拡張議論のためではありません。この会話は[チャットに移動]されています(http://chat.stackoverflow.com/rooms/129268/discussion-on-question-by-r-mia-segmentation-fault-in-a-program-that-reverses- a)。 –