C语言 在结构中使用posix_memalign的隔离错误



我现在面临着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 pointersn");
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 twon");
exit(EXIT_FAILURE);
}
if (errorCode == ENOMEM)
{
fprintf(stderr,
"Error: Insufficient memory to fulfill the requestn");
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的分段错误,我不知道我在这里做错了什么。这可能是某个地方的混乱指针操作,但我无法弄清楚在哪里。

man posix_memalign

是你的朋友。你会在那里找到:

int posix_memalign(void **memptr, size_t alignment, size_t size);

所以它想要指针的地址&structure->a 而不是旧的值structure->a。

相关内容

  • 没有找到相关文章

最新更新