如何解决我正在使用 posix_memalign 分配内存,但是当我尝试使用向量时,出现分段失败
我创建了以下函数,该函数将方阵的所有元素转换为适当大小的向量。该函数可与 malloc 一起正常工作,但我需要使用 posix_memalign 创建向量,然后出现错误。
void convert_matrix_to_vector(int **matrix,const int matrixSize,int **vector,int *vectorSize){
int *vectorAux,i,j,k,vectorSizeAux;
vectorSizeAux = matrixSize * matrixSize;
posix_memalign((void **)&vectorAux,vectorSizeAux,vectorSizeAux * sizeof(int));
k = 0;
for (i = 0; i < matrixSize; i++){
for (j = 0; j < matrixSize; j++){
vectorAux[k] = matrix[i][j];
k++;
}
}
free_matrix_memory(matrix,matrixSize);
*vector = vectorAux;
*vectorSize = k;
}
当我运行程序时,vectorSizeAux 的值为 16。
出现的错误是:Program received signal SIGSEGV,Segmentation fault.
尝试执行该行时:
vectorAux[k] = matrix[i][j];
解决方法
这个回答要感谢用户“一些程序员花花公子”:
POSIX 参考页面指出对齐必须是 2 的幂,也是 sizeof(void*) 的倍数。如果您使用的是 64 位系统,那么 sizeof(void*) 将为 8,这使 4 成为无效对齐。
这就是为什么 vectorSizeAux 的最小大小必须是 8 的原因,我在运行程序时出错,给它的值为 4、8 和 16。在值为 4 时,posix_memalign 失败,执行停止,我不再工作与其他值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。