相关疑难解决方法(0)

我们应该检查内存分配是否失败?

我已经看到很多代码在进行分配时检查NULL指针.这使代码变得冗长,如果没有一致地完成,只有当程序员感觉到它时,甚至不能确保程序在地址空间用完时不会崩溃.此外,如果程序无法进行更多分配,那么它无论如何都无法完成其功能,对吧?

所以我的问题是,对于大多数程序来说,根本不检查并且如果内存耗尽会让程序崩溃,这不是更好吗?至少代码更具可读性.

注意

我说的是在现代计算机上运行的桌面应用程序(至少2 GB的地址空间),而且绝对不会运行航天飞机,生命支持系统或BP的石油平台.最重要的是,我在谈论使用malloc但从未真正超过5 MB内存使用量的程序.

c malloc error-handling

13
推荐指数
3
解决办法
9342
查看次数

您是否仍然在C++程序中捕获内存分配失败

我正在为公司写一些指导方针,我需要回答一些棘手的问题.这个很难.

解决方案可以是:

  1. 根本不跟踪.确保使用new分配对象,这将在分配失败时引发异常.该应用程序将死亡,这不是什么大不了的事.PRO - 代码通常可以非常干净.

  2. 跟踪内存分配失败并相应地报告,就像任何错误(例如文件访问错误)一样.

老实说,如果我们使用选项2,我必须编写更多代码.例如,许多std :: tring操作涉及内存分配.如

std :: string str1,str2; str1 = str2; str + = str2;

我们的软件将始终运行主要平台,而不是嵌入式.不知怎的,我认为选项1是要走的路.你怎么看?

c++ memory-management

9
推荐指数
4
解决办法
2338
查看次数

使用后释放内存

我有一个命令行C程序,我使用calloc()函数为一个结构分配一些内存,该结构也有一个结构,并分配了一些内存.

如果我使用free()函数从父结构释放内存,它还会从子结构中释放内存吗?

或者我应该首先从子结构中释放内存?

c free memory-leaks memory-management calloc

2
推荐指数
2
解决办法
307
查看次数

malloc()的奇怪行为

试着理解我的问题的答案

当试图释放由堆管理器分配的内存时会发生什么,它分配的内容超过了要求?

我写了这个函数,并对其输出感到困惑

int main(int argc,char **argv){
  char *p,*q;
  p=malloc(1); 
  strcpy(p,"01234556789abcdefghijklmnopqrstuvwxyz"); //since malloc allocates atleast 1 byte
  q=malloc(2);
  //    free(q);
  printf("q=%s\n",q);
  printf("p=%s\n",p);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

产量

q=vwxyz
p=01234556789abcdefghijklm!
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这种行为吗?或者这个实现是否具体?

如果free(q)被取消注释,我也会收到SIGABRT.

c heap malloc free

1
推荐指数
2
解决办法
2853
查看次数

标签 统计

c ×3

free ×2

malloc ×2

memory-management ×2

c++ ×1

calloc ×1

error-handling ×1

heap ×1

memory-leaks ×1