Я пытаюсь создать указатель на динамический массив и, следовательно, нужна функция, которая принимает размер массива и возвращает указатель. Тем не менее, я получаю ошибку каждый раз, когда я это делаю. Сама функция не дает ошибок, но распределение делает.
Может кто-нибудь указать, что может быть неправильным? Я читал много страниц в Интернете, но, похоже, пока не понял. Это очень поможет!
Изменение: Обновлен код:
int *ReturnBitVector(int bitvector_size); //static
int *ReturnBitVector(int bitvector_size) //static
{
int *bitvector = malloc((bitvector_size*1024*8)*sizeof *bitvector);
return bitvector;
}
int* BV = (int*)ReturnBitVector;
if(BV == NULL){ //error here!
perror("error in allocating memory.\n");
}
Ошибка, которую я получаю:
join.c:71: error: expected identifier or ‘(†before ‘ifâ€
Во-первых, вы разыменовали указатель, исправив ниже:
int* BV; BV = ReturnBitVector(1024);
Во-вторых, вы забыли указать тип параметра в определении функции. Разве вы не должны просто скопировать вставку заголовка 2 строки выше?
int* BV;
BV = *ReturnBitVector(1024);
Функция ReturnBitVector
возвращает значение типа int *
. Вы разыскиваете эту точку, которая вычисляет целое число, а затем присваивает этому целочисленному значению значение BV
которое имеет тип int *
- другой тип. Компилятор неявно бросает целочисленный тип в тип указателя перед его назначением и испускает предупреждение -
join.c:69: warning: initialization makes pointer from integer without a cast
Вы пропустили тип параметра в определении функции. Кроме того, не делайте результат malloc
. Прочтите это - Я делаю результат malloc? Я предлагаю следующие изменения:
// function declaration
int *ReturnBitVector(int bitvector_size);
// function definition
int *ReturnBitVector(int bitvector_size)
{
int *bitvector = malloc((bitvector_size*1024) * sizeof *bitvector);
return bitvector;
}
// call the function
int *BV = ReturnBitVector(1024);
// check for NULL
if(BV == NULL) {
perror("error in allocating memory.\n");
// handle it
}
// do stuff with BV
free(BV);
BV = NULL;
Проблема заключается в вашей функции. Аргумент, который он принимает (bitvector_size), не имеет типа. Попробуйте так:
int *ReturnBitVector(int bitvector_size) //static
{
int *bitvector;
//bitvector = new int[bitvector_size*1024*8];
bitvector = (int*) malloc(bitvector_size*1024*8);
return bitvector;
}
int* BV;
BV = *ReturnBitVector(1024);