从被调用者的角度来看,如何检测内存是动态的还是静态的?

4 c c++ realloc static-memory-allocation

注意:当我在这里说"静态字符串"时,我指的是realloc无法处理的内存.

嗨,我已经编写了一个带有char*参数的过程,我想创建一个副本,因为内存不能通过realloc重定位/调整大小.因此,该过程是一个"重型"字符串处理器,因此无论是否无效并且复制字符串,无论它是否是静态的,将来肯定会导致一些内存开销/处理问题.

我曾尝试使用异常处理程序来修改静态字符串,应用程序只是退出而没有任何通知.我退后一步,看看C并说:"我没有留下深刻的印象." 如果我听说过一个,那将是一个例外.

我试图使用异常处理程序在静态变量上调用realloc ... Glib报告说它找不到一些结构的私有信息(我敢肯定)我不知道并且显然在程序上调用abort意味着它不是一个可以用longjmp/setjmp或C++尝试捕获的异常,最后捕获.

我很确定必须有办法合理地做到这一点.例如,动态内存很可能不在静态内存附近的任何位置,所以如果有办法从地址泄露这些信息......我们可能只有一个宾果游戏.

我不确定C/C++预处理器中是否有任何宏可以识别宏参数的来源和类型,但如果没有,那将是非常愚蠢的.Macro Assemblers非常聪明.从缺乏强大的错误处理来判断,如果没有,我不会感到有点惊讶.

das*_*ght 5

C不提供一种可移植的方式来告知静态分配的内存块来自动态分配的内存块.您可以struct使用字符串指针和指示对象占用的内存类型的标志来构建自己的.在C++中,您可以使它成为一个具有两个不同构造函数的类,每个内存类型一个,以使您的生活更轻松.

就中止你的程序而言,尝试释放或重新分配尚未动态分配的内存是未定义的行为,因此中止是一个公平的游戏.