Это может быть из-за мое отсутствие понимания C, но я получаю некоторые (то, что я бы назвал) непонятные ошибки при работе с массивами:Странных ошибок массива C
Вот код:
int * generateRandomArray(int numPageReplacements) {
// Seed random number generator
srand(time(NULL));
int * randPages = (int *)malloc(sizeof(int)*numPageReplacements);
for (int i = 0; i < numPageReplacements; i++) {
randPages[i] = rand() % 10; // generate (with uniform distribution) number 0 - 9
printf("%d ", randPages[i]); // for testing purposes
}
printf("\nRandomPages[3] = %d \n" ,randPages[3]);
return randPages; // return array pointer
}
Выход:
7 9 4 6 4 6 5 7 6 3
RandomPages[3] = 6
Program ended with exit code: 0
Если я запускаю эту спина к спине (принимать случайные числа, сгенерированные выше), это даст 4 иногда (что можно было бы ожидать) и 6 на других (это как он не знает границы каждого массива ce LL).
При попытке получить массив из этой функции от вызова:
int * ary = generateRandomArray(int numPageReplacements);
printf("Size of ary = %lu",sizeof(ary));
Выход:
Size of ary = 8
Ни равно 8 независимо от того, ЧТО numPageReplacements есть.
Компилятор:
Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn) Target: x86_64-apple-darwin14.0.0 Thread model: posix
ли я что-то пропустил?
'ary' is 8, потому что вы печатаете размер указателя, а не выделенный объем памяти. – SSC
Массив начинается с нуля, то есть randPages [0] == 7, randPages [1] == 9, randPages [2] == 4, randPages [3] == 6, ... – Casperah
Возможный дубликат [How to найти «sizeof» (указатель, указывающий на массив)?] (http://stackoverflow.com/questions/492384/how-to-find-the-sizeofa-pinter-pointing-to-an-array) – dandan78