C++: 检查动态去分配是否正常工作。

问题描述 投票:0回答:1

我目前正在关注Springer的一本书《C++中的科学计算指南》,其中有一个关于指针的练习是这样说的。

"写一段代码,动态分配内存给两个长度为3的双倍向量,给每个条目赋值,然后取消分配内存"。扩展这段代码,使它能计算这些向量的标量乘积,并在去分配内存之前将其打印到屏幕上。把内存的分配、计算和去分配内存放在一个for循环里面,这个循环要运行1,000,000,000次:如果内存没有正确去分配,你的代码就会使用所有可用资源,你的计算机可能会很吃力。"

我的尝试是。

for (long int j = 0; j < 1000000000; j++) { 

    // Allocate memory for the variables
    int length = 3;
    double *pVector1;
    double *pVector2;
    double *scalarProduct;
    pVector1 = new double[length];
    pVector2 = new double[length];
    scalarProduct = new double[length];

    for (i = 0; i < length; i++) { // loop to give values to the variables
        pVector1[i] = (double) i + 1;
        pVector2[i] = pVector1[i] - 1;
        scalarProduct[i] = pVector1[i] * pVector2[i];
        std::cout << scalarProduct[i] << " " << std::flush; // print scalar product
    }
    std::cout << std::endl;

    // deallocate memory
    delete[] pVector1;
    delete[] pVector2;
    delete[] scalarProduct;
}

我的问题是,这段代码可以运行,但效率低下。似乎内存的去分配应该快得多,因为它运行了一分钟以上才终止。我假设是我误用了去分配,但没有找到合适的方法来解决。

c++ arrays pointers memory-management dynamic-memory-allocation
1个回答
0
投票

你的代码完全做到了它应该做到的,运行很长时间而不会因为out_of_memory而使电脑崩溃。这本书可能有点过时了,因为它假设你在崩溃之前不能分配超过72.000.000.000字节的内存。你可以测试一下,删除因此泄漏的内存。

© www.soinside.com 2019 - 2024. All rights reserved.