当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

删除函数返回的指针

    最近在做项目的时候,调用了很多第三方的API, 这些API 有很多返回char *, const char *, 有时需要delete 返回的字符串,有时不能,一删则错,晕,这有什么规则吗?
让我们先看看几个例子
// Return Pointer.cpp : Defines the entry point for the console application.
//
 
#include \"stdafx.h\"
#include \"stdlib.h\"
#include \"string.h\"
 
//Array
char* test1()
{
        char p[] = \"test\";  //静态存储区上,可以被修改,不是堆上,所以不能delete掉
        return p;
}
 
const char* test2()
{
        const char p[] = \"test\"; //const变量, 全局数据
        return p;
}
 
char* test3()
{
        static char p[] = \"test\"; //静态存储区上
        return p;
}
 
//pointer to const
char* test4()
{
        char *p = \"test\";   //p指向常量字符串,返回字符串指针不能被编辑
        return p;
}
 
const char* test5()
{
        const char *p = \"test\"; //指向常量的指针
        return p;
}
 
char* test6()
{
        static char p = ’t’; //static, 全局数据
        return &p;
}
 
char* test7()
{
        return \"test\"; //常量
}
 
//pointer to heap
char* test8()
{
        char *p= new char[10]; //heap
        strcpy(p, \"test\");
        return p;
}
 
const char* test9()
{
        char *p= new char[10]; //heap
        strcpy(p, \"test\");
        return p;
}
 
char* test10()
{
        static char *p = new char[10]; //heap
        strcpy(p, \"test\"); [Page]
        return p;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
        //Array
        char *str1 = test1();
    *str1 = ’T’;
        //delete str1;
 
        const char *str2 = test2();
        //*str2 = ’T’;
        //delete str2;
        
        char *str3 = test3();
        *str3 = ’T’;
        //delete str3;
 
        //pointer to const
        char *str4 = test4();
        //*str4 = ’T’;
        //delete str4;
 
        const char *str5 = test5();
        //*str5= ’T’;
        //delete str5;
 
        char *str6 = test6();
        *str6 = ’T’;
        //delete str6;
 
        char *str7 = test7();
        //*str7 = ’T’;
        //delete str7;
 
        //pointer to heap

共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接