在C++中支持动态分配内存
但是我有一个问题,那就是在行如
int *p=new int[表达式];中的表达式是不是可以不写的?
如果是必须写,那么动态表现在哪?

解决方案 »

  1.   

    申请一个变量
    int *p=new int;
    申请一个数组
    int *p=new int[100];
      

  2.   

    不可以的,你是一个表达式可以的,但在运行到new这一句的时候,这必须是一个定值 了
      

  3.   

    CString str = "xyz";
    int nLeng = str.GetLength() + 1 ;
    char * p = new char[nLeng]; //不会浪费, 也不会少
    strcpy(p,str);
    //....
    delete [] p;
      

  4.   

    CString str = "xyz";
    int nLeng = str.GetLength() + 1 ;
    char * p = new char[];
    strcpy(p,str);
    //....
    delete [] p;释放时有问题
      

  5.   

    搂主对“动态”的理解可能有些偏差,“动态”指的是运行时才确定大小而不是编译时就已经确定大小了。
    你说的那个“表达式”就是用于在运行时根据具体需要,“动态”确定要分配的大小。
    举个小例子:
    char buff[256]; // 静态
    char *buff = new char[(rand() % 256) + 1]; // 动态
      

  6.   

    表达式 是里所分配的数组空间的大小,可以不写
    不写代表使用堆分配分配内存
    如:MyStructType* myStruct = new MyStructType;// 通过指针使用该结构myStruct->topScore = 297;delete myStruct;写上代表分配一个数组空间,如:
    int* myIntArray = new int[BUFF_SIZE];...
    delete [] myIntArray;