Je faisais un test et le moteur de test en ligne affichait une erreur de segmentation, ce qui est déroutant car sans plus de détails, et j'ai vérifié le pointeur non NULL et ils fonctionnent très bien, mais ne pas comment tableau fonctionne ici. Parce que lors du débogage, tout va bien, jusqu'à ce que j'essaie de cout/imprimer le tableau. il rapporte un est écrasé ici et casse. Je ne peux rien faire ici si ça casse, et je me casse la pause ou continue. si je continue, ça va très bien. donc j'étais vraiment confus.Erreur de segmentation dans un programme qui inverse un tableau alloué dynamiquement
Mon ordinateur est Windows 7, je cours le code dans Visual Studio 2010 C++. Le débogage n'est pas si clair pour résoudre le problème, et j'apprends le C++ pas très efficace. Résoudre avec Array besoin d'allocation dynamique. Cela a quelque chose à avec l'allocation dynamique, quand je travaille dans Java, je crée un nouveau tableau. Je dois
int[] newArray = {2,4,1,2,3};
ou
int[] newArray = new int[] {2,4,1,2,3};
Enfin, ce problème est résolu, ce qui me rend très heureux. La lecture et l'apprentissage sont très importants, le codage est également important. Merci à tous,
Et en utilisant vecteur au lieu d'utiliser tableau. Ce serait plus facile.
#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;
}
aide tableau à nouveau (je doute le code suivant):
#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;
}
Il a fonctionné parfaitement sur mon ordinateur portable, ce qui est source de confusion parce qu'un est pointeur, mais je l'utilise comme un tableau. Il ne devrait pas fonctionner ......
Version finale de tableau: http://ideone.com/ZMsD35 Fait parfaitement.
#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;
}
commentaires ne sont pas pour la discussion élargie; cette conversation a été [déplacée pour discuter] (http://chat.stackoverflow.com/rooms/129268/discussion-on-question-by-r-mia-segmentation-fault-in-a-program-that-reverses- une). –