Я начинаю с C и сталкиваюсь с этой проблемой: я создал функцию, основанную на методе быстрого распределения матриц (Oliveira and Stewart, «Написание научного программного обеспечения», pag 94), и я хочу использовать его для любого типа данных. поэтому я изменил его немного следующим образом:using sizeof (void) внутри malloc
void ** malloc_array2d(size_t m, size_t n){
/* pointer to array of pointers */
void ** pointer;
size_t i;
/* allocate pointer array of length m */
pointer = malloc(m*sizeof(void));
if(pointer == NULL){
return NULL;
}
/* allocate storage for m*n entries */
pointer[0] = malloc(m*n*sizeof(void));
if (pointer[0] == NULL) {
free(pointer);
return NULL;
}
/* set the pointers */
for (i = 1; i < m; i++) {
pointer[i] = pointer[0] + i*n;
}
return pointer;
}
, но я получаю ошибку сегментации.
Вопрос: как разрешить выделение памяти для разных типов данных, поскольку sizeof (void) не работает (и действительно, он возвращает только 1)? Любая обратная связь действительно оценена. Спасибо.
Что такое звук одной ладони? Речь идет о том же философском вопросе, что и вопрос о том, какой размер не существует. Вероятно, вы должны выделить некоторое количество * байтов *. –
Вам нужно указать размер файла типа 'malloc_array2d', потому что он не знает, нет ли у вас этого. Вы получите что-то вроде 'void ** malloc_array2d (size_t m, size_t n, size_t element_size);'. –
MSVC говорит о 'sizeof (void)' 'предупреждение C4034: sizeof возвращает 0". Обратите внимание на такие предупреждения. –