0

これが私のコードです:

int main(){

long userInput;
long placeArray[userInput +1];
long divisionPlace, modPlace;
long number = userInput;
long two = 2;

cout << "enter: ";
cin >> userInput;


for (int i = 1; i < userInput; i++) {
    divisionPlace = number / two;
    modPlace = number % two;
    placeArray[number - i ] = modPlace;
}

for (int i = 0; i < userInput; i++) {
    cout << placeArray[i] << " ";
}
cout <<endl;

return 0;
}

なぜ私がメモリを誤って扱っているのかについて、誰かがコードの私のエラーを指摘できますか?

4

2 に答える 2

3

コメントで述べたように、userInputここで初期化される前に使用しています:

long placeArray[userInput +1];

したがってplaceArray、以下のループでアクセスしたときに期待するサイズにはなりません。これにより、割り当てなかったメモリへの書き込みが発生し、スタックが台無しになります。

于 2012-10-22T19:17:52.947 に答える
1

アレイが正しく割り当てられていません。

long userInput;

cout << "enter: "; 
cin >> userInput; 

if (userInput <= 0)
{
   cerr << "error" << endl;
   exit(1);
}

long* placeArray = new long[userInput +1]; 

long divisionPlace, modPlace; 
long number = userInput; 
long two = 2; 

for (int i = 1; i < userInput; i++) { 
    divisionPlace = number / two; 
    modPlace = number % two; 
    placeArray[number - i ] = modPlace; 
} 

for (int i = 0; i < userInput; i++) { 
    cout << placeArray[i] << " "; 
} 
cout <<endl; 

delete [] placeArray;
于 2012-10-22T19:18:47.060 に答える