美文网首页
内存的一些问题

内存的一些问题

作者: nit小星星 | 来源:发表于2019-03-09 16:27 被阅读0次

    void GetMemory2(char **p, int num)

    {

     *p = (char *)malloc(sizeof(char) * num);

    }

    void Test2(void)

    {

     char *str = NULL;

     GetMemory2(&str, 100); // 注意参数是 &str,而不是str

     strcpy(str, "hello");

     cout<< str << endl;

     free(str);

    }

    int *p=(*int)malloc(sizeof(int)*lenth);

    void free(void *memblock);

    为什么free函数不象malloc函数那样复杂呢?这是因为指针p的类型以及它所指的内存的容量事先都是知道的,语句free(p)能正确地释放内存。如果p是NULL指针,那么free对p无论操作多少次都不会出问题。如果p不是NULL指针,那么free对p连续操作两次就会导致程序运行错误。

    https://www.cnblogs.com/KunLunSu/p/7787119.html

    class obj

    {

    public:

    void init();

    void destroy();

    obj();

    ~obj();

    }

    void testfun()

    {

    *obj a=(obj*)malloc(sizeof(obj));

    a->init();初始化内存

    a->destroy();清理工作

    free(a);

    }

    如果在申请动态内存时找不到足够大的内存块,malloc和new将返回NULL指针,宣告内存申请失败。通常有三种方式处理“内存耗尽”问题。

    void Func(void)

    {

     A *a = new A;

     if(a == NULL)

     {

      return;

     }

     …

    }

    void Func(void)

    {

     A *a = new A;

     if(a == NULL)

     {

      cout << “Memory Exhausted” << endl;

      exit(1);

     }

     …

    }

    看看内存是否申请成功

     有一个很重要的现象要告诉大家。对于32位以上的应用程序而言,无论怎样使用malloc与new,几乎不可能导致“内存耗尽”。我在Windows 98下用Visual C++编写了测试程序,见示例7。这个程序会无休止地运行下去,根本不会终止。因为32位操作系统支持“虚存”,内存用完了,自动用硬盘空间顶替。我只听到硬盘嘎吱嘎吱地响,Window 98已经累得对键盘、鼠标毫无反应。

      我可以得出这么一个结论:对于32位以上的应用程序,“内存耗尽”错误处理程序毫无用处。这下可把Unix和Windows程序员们乐坏了:反正错误处理程序不起作用,我就不写了,省了很多麻烦。

    我不想误导读者,必须强调:不加错误处理将导致程序的质量很差,千万不可因小失大。

    相关文章

      网友评论

          本文标题:内存的一些问题

          本文链接:https://www.haomeiwen.com/subject/tlospqtx.html