我正在使用 posix_memalign 分配内存,但是当我尝试使用向量时出现分段失败

I am using posix_memalign to allocate memory, but when I try to use the vector I get segmentation failure

我创建了以下函数,将方阵的所有元素转化为适当的向量 size.The 函数与 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失败,执行停止,我不再使用其他值。