免責事項:これは宿題です。私はそれを試みていますが、誰かが私のためにそれをすることを期待したり、望んでいません。私が間違っているところのほんの少しのポインタ(hehe)をいただければ幸いです。
宿題ではint*
、10個の要素を保持する配列を作成してから、それに100万intを挿入しようとする必要があります。挿入するたびに、配列のサイズを変更する必要があるかどうかがチェックされます。サイズを変更する必要がある場合は、サイズを大きくして、もう1つの要素を保持できるようにします。
10,000個の要素を挿入すると正常に機能しますが、100,000個の要素を挿入すると、次のエラーが発生します。
*** glibc detected *** ./set2: realloc(): invalid old size: 0x00000000024dc010 ***
これは私が実行しているコードです。読みやすいようにコメントしました。
void main()
{
//begin with a size of 10
int currentsize = 10;
int* arr = malloc(currentsize * sizeof(int));
int i;
//initalize with all elements set to INT_MAX
for(i = 0; i < currentsize; i++) {
arr[i] = INT_MAX;
}
// insert random elements
for(i = 0; i < 100000; i++) {
currentsize = add(rand() % 100,arr,currentsize);
}
free(arr);
}
/*
Method resizes array if needed, and returns the new size of the array
Also inserts the element into the array
*/
int add(int x, int* arr, int size)
{
//find the first available location
int newSize = size;
int i;
for(i = 0; i < size; i++) {
if (arr[i] == INT_MAX)
break;
}
if (i >= size) {
//need to realloc
newSize++;
arr = realloc(arr, newSize * sizeof(int) );
}
arr[i] = x;
return newSize;
}