私は、動的に割り当てられた配列がいくつかの整数を格納し、必要に応じて最大サイズを増やし、それに未ソートとソートされた配列の両方を表示できるプログラムを作成しようとしています注文。ポインタ、動的配列、メモリリーク
私のフルコードへのリンクは、下にあります。
私が最初に持っている問題は、サイズを最初に増やす必要がある場合に、動的に割り当てられた配列がhaywireになることです。関連するコードは以下の通りです。
while (counter <= arraySize)
{
cout <<"Please enter an integer number. Use 999999 (six 9's) to stop\n";
if (counter == arraySize) //If the counter is equal to the size of the array
{ //the array must be resized
arraySize +=2;
int *temp = new int[arraySize];
for (counter = 0; counter < arraySize; counter++)
{
temp[counter] = arrayPtr[counter];
}
delete [] arrayPtr;
arrayPtr = temp;
counter ++; //the counter has to be reset to it's original position
} //which should be +1 of the end of the old array
cin >> arrayPtr[counter];
if (arrayPtr[counter] == sentinel)
{
cout << "Sentinel Value given, data entry ending.\n";
break;
}
counter ++;
}
これは代わりに、センチネル値を待つので、それだけで(何の境界チェックしないため)、その点を過ぎてメモリ内の整数をリストし始め意図しない操作を生成します。
次の問題は、私の並べ替え関数が実行を拒否していることです。私はこれを5つの値でテストしようとしましたが、プログラムはコードの特定の部分に到達するとクラッシュします。
機能は
sorting (arrayPtr);
を使用して呼ばれているが、機能自体は、次のようになります。この問題に関する
void sorting (int *arr)
{
int count = 0, countTwo = 0, tempVal;
for (count = 0; arr[count] != 999999; count++) //I figured arr[count] != 999999 is easier and looks better
{ //A bunch of if statements
for (countTwo = 0; arr[countTwo] != 99999; countTwo++)
{
if (arr[countTwo] > arr[countTwo+1])
{
tempVal = arr[countTwo];
arr[countTwo] = arr[countTwo+1];
arr[countTwo+1] = tempVal;
}
}
}
}
すべてのヘルプは高く評価されます。私のソースコードへ
リンク:
http://www.mediafire.com/file/w08su2hap57fkwo/Lab1_2336.cpp
により、コミュニティからのフィードバックには、このリンクはできるだけ長くアクティブのままになります。
下記のリンクは私の修正されたソースコードです。それは私が作った間違いとそれを修正するための答えをより強調するために注釈されています。
http://www.mediafire.com/file/1z7hd4w8smnwn29/Lab1_2336_corrected.cpp
これは教育上の理由がない限り、生の 'new'と' delete'を使用しないでください。 'std :: vector'は動的配列のはるかに良い選択肢です。 – ralismark
これは教育上の理由によるものです。 –
*これは私の質問に答えるまでアクティブになります。* - そして、このリンクはもはや存在しないので、SOに関するこの質問は役に立たなくなります。 – PaulMcKenzie