C++:检查动态取消分配是否正常工作



我目前正在关注Springer的一本名为"C++年科学计算指南"的书,其中关于指针的练习如下:

"编写代码,将内存动态分配给长度为 3 的两个双精度向量,为每个条目分配值,然后取消分配内存。扩展此代码,以便它计算这些向量的标量乘积,并在取消分配内存之前将其打印到屏幕上。将内存的分配、内存的计算和取消分配放在一个运行 1,000,000,000 次的 for 循环中:如果内存没有正确解除分配,您的代码将使用所有可用资源,您的计算机可能会遇到困难。

我对此的尝试是:

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;
}

我的问题是这段代码可以运行,但效率低下。似乎内存的解除分配应该快得多,因为它在终止它之前运行了一分钟以上。我假设我滥用了取消分配,但没有找到适当的方法来修复它。

您的代码完全按照应有的方式运行,运行很长时间而不会因out_of_memory而使计算机崩溃。这本书可能有点过时,因为它假设您在崩溃之前不能分配超过 72.000.000.000 字节。您可以测试它删除删除,从而泄漏内存。

最新更新