我现在遇到了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;
}
这是我的datastruct结构:
typedef struct {
void* a;
} Datastruct;
可悲的是,这会导致posix_memalign出现分段错误,我不知道我在这里做错了什么。它可能是一个混乱的指针操作,但我无法弄清楚在哪里。
答案 0 :(得分:2)
man posix_memalign
是你的朋友。你会在那里找到:
int posix_memalign(void **memptr, size_t alignment, size_t size);
所以它希望指针&amp; structure-&gt; a 的地址不是旧值 structure-&gt; a 。