Я столкнулся с проблемой с posix_memalign прямо сейчас, которая, вероятно, вызвана большим смущением в моем мозгу относительно указателей и переменных.Я давно не работал с C и мне нужно снова найти там свой путь.
Я пытаюсь выделить немного памяти с помощью posix_memalign и хочу использовать указатель из структур массива для моего адреса в моемвыделенная память.
Это в основном метод, который я использую, и я понятия не имею, почему это не получится:
int init_const(void* data, int alignment, uint64_t size, int offset, DataType type, int stride, int numDomains){
int i;
size_t bytesize = 0;
int errorCode;
//int elements = 0;
size_t typesize = dataTypeLength(type);
bytesize = (size+offset) * typesize;
//int elements = alignment / typesize;
data = (void*)malloc(numDomains * sizeof(Datastruct));
//Allocating memory for array of datastructures
if(data == NULL){
fprintf(stderr,
"Error: Insufficient memory, can't even malloc array of pointers\n");
exit(EXIT_FAILURE);
}
for(i=0; i<numDomains; i++){
Datastruct* structure = (Datastruct*)data+sizeof(Datastruct)*i;
errorCode = posix_memalign(structure->a, alignment, bytesize);
printf("Hallo");
if (errorCode)
{
if (errorCode == EINVAL)
{
fprintf(stderr,
"Error: Alignment parameter is not a power of two\n");
exit(EXIT_FAILURE);
}
if (errorCode == ENOMEM)
{
fprintf(stderr,
"Error: Insufficient memory to fulfill the request\n");
exit(EXIT_FAILURE);
}
}
if (structure->a == NULL)
{
fprintf(stderr, "Error: posix_memalign failed!\n");
exit(EXIT_FAILURE);
}
}
return 0;
}
Вот моя структура данных:
typedef struct {
void* a;
} Datastruct;
К сожалению, это вызывает ошибку сегментации в posix_memalign, и я понятия не имею, что я делаю здесь неправильно.Возможно, это где-то испорченная операция с указателем, но я не могу понять, где.