gpt4 book ai didi

C 关于异常处理的建议

转载 作者:太空宇宙 更新时间:2023-11-04 01:45:15 25 4
gpt4 key购买 nike

由于我是 C++ 的新手,我在处理学校作业时遇到了问题。我以前从未接触过异常(exception)情况。

我需要为我的任务做的是创建一个异常机制来计算可以在程序中分配多少内存(以 MB 为单位)。

我应该使用 new[] 运算符和 catch() 并且仅限于使用一个变量。

我已经尝试了这些代码,这就是我目前所拥有的。我不知道我是否在正确的轨道上。任何建议表示赞赏。谢谢。

int main() {

char *mem;

unsigned long long count = 1;

while (1) {
mem = new char[1025 * 1054];
if (mem == NULL)
break;

free(mem);
count++;
}

std::cout << "count: " << count * 1024000;
}

最佳答案

警告 free 无效且有未指定的行为,删除已分配内存的方法是 delete [] mem;

除此之外,在循环中执行 new 然后 delete 是没有用的,如果你想检查限制分配大小,你需要不删除(也不释放当然)

如果您想知道连续 block 的最大大小,请执行初始malloc,然后在循环中增加大小的realloc获取 NULL

例如

#include <stdlib.h>
#include <iostream>

int main() {
void * mem = malloc(0);
size_t count = 0;

while ((mem = realloc(mem, (++count)*1024*1024)) != NULL)
;

free(mem);

std::cout << "count: " << --count << "Mb" << std::endl;
}

请注意,该程序不会写入分配的内存,因此我可以在我的树莓派上执行它而不会杀死它产生交换:

pi@raspberrypi:/tmp $ g++ -pedantic -Wextra a.cc 
pi@raspberrypi:/tmp $ ./a.out
count: 1023Mb
pi@raspberrypi:/tmp $

使用 C++:

#include <stdlib.h>
#include <iostream>

int main() {
char * mem;
size_t count = 0;

try {
while (true) {
mem = new char [(++count)*1024*1024];
delete [] mem;
}
}
catch (std::bad_alloc &) {
}

std::cout << "count: " << --count << "Mb" << std::endl;
}

编译和执行:

pi@raspberrypi:/tmp $ g++ -pedantic -Wextra a.cc 
pi@raspberrypi:/tmp $ ./a.out
count: 543Mb

结果不一样,比较真实,对应我的空闲内存

关于C 关于异常处理的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54988139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com