c++ - 在 C++ 中将大型二维数组转换为一维数组的内存分配

标签 c++ arrays multidimensional-array memory-management dynamic-memory-allocation

A是二维数组,data是一维数组

double **A, *data;

全尺寸为 9222, 内存分配:

A = (double **)malloc((fullsize)*sizeof(double *));         //allocate memory dynamically for matrix A
for (i = 0; i < fullsize; i++)
    A[i] = (double *)malloc((2 * fullsize)*sizeof(double));

data = (double *)malloc((fullsize*fullsize)*sizeof(double *));

转换逻辑:

{
    for (int n = 0; n<fullsize; n++)
    for (int m = 0; m<fullsize; m++)
    {
        data[n*fullsize + m] = A[n][m];
    }
}

错误日志:

The thread 0xad80 has exited with code 0 (0x0).
Unhandled exception at 0x00F5E6E9 in ConsoleApplication1.exe: 0xC0000005: Access violation writing location 0x69E65000.

The program '[50964] ConsoleApplication1.exe' has exited with code 0 (0x0).

最佳答案

您正在使用 double 指针的大小分配 data:

data = (double *)malloc((fullsize*fullsize)*sizeof(double *));
//                                                        ^

它应该使用 sizeof(double) 来分配。

您可以通过使用 vector 在 C++ 中避免使用 malloc。如果您想要分配的确切大小,请改用 new double[...]。无论哪种情况,您最终都会得到更具可读性的代码:

double **A = new double*[fullsize];
for (int i = 0 ; i != fullsize ; i++) {
    A[i] = new double[fullsize];
}
double *data = new double[fullsize*fullsize];

关于c++ - 在 C++ 中将大型二维数组转换为一维数组的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45459649/

相关文章:

PHP - 对嵌套数组执行解析规则

arrays - 数组中每个类实例的调用方法(Matlab)

c++ - 从字符串 vector 中获取每个字符串的第一个和最后一个字符

c++ - 输入被切断

c++ - 在 C++ 中打印总和为目标的子集

python - 基于子数组的第二个元素对多维数组进行排序

javascript - 如何在 Node.js 中对 ndarray 应用剪切?

c++ - CMakeLists.txt : (add_executable): No SOURCES given to target: Tutorial

arrays - 在elasticsearch中的字符串数组中搜索精确字段

javascript - 如何从嵌套对象构建 HTML?