请帮小弟我看看小弟我写的这两个函数,用来请求和回收一个动态字符串

请帮我看看我写的这两个函数,用来请求和回收一个动态字符串。
本帖最后由 liuziangexit 于 2015-11-10 17:33:13 编辑
自己写的,加了些断点,然后看着任务管理器一步一步执行了,似乎没什么问题,但是还是请前辈们帮忙看看有没有什么疏漏之处。。。


char* NewSTR(int count) {
if (count >= 1) {
char *p = NULL;
p = new char[count];
if (p == 0) return 0;
for (int k = 0; k < count; k++) p[k] = NULL;
return p;//成功,返回指针
}
return 0;//失败
}
//新建一个字符数组,输入 count 为要新建的数组长度,返回值为该字符数组的地址。这个数组应由 DelSTR 来回收;


int DelSTR(char *p,int count) {
if (count >= 1) {
delete [count]p;
p = NULL;
return 1;//成功,返回1
}
return 0;//失败,返回0
}
//删除一个由 NewSTR 新建的数组,输入 p 为指向该数组的指针,count 是该数组长度,删除成功返回 1,否则返回0。
------解决思路----------------------
没问题

通常分配后只用将p[0]设置成‘\0’就行,没必要每个都设置(当然这样也行,但这样的话用memset效率会更高) 

delete [count]p; 可以直接写成delete[] p;
------解决思路----------------------
引用:
自己写的,加了些断点,然后看着任务管理器一步一步执行了,似乎没什么问题,但是还是请前辈们帮忙看看有没有什么疏漏之处。。。


char* NewSTR(int count) {
if (count >= 1) {
char *p = NULL;
p = new char[count];
if (p == 0) return 0;
for (int k = 0; k < count; k++) p[k] = NULL;
return p;//成功,返回指针
}
return 0;//失败
}
//新建一个字符数组,输入 count 为要新建的数组长度,返回值为该字符数组的地址。这个数组应由 DelSTR 来回收;


int DelSTR(char *p,int count) {
if (count >= 1) {
delete [count]p;
p = NULL;
return 1;//成功,返回1
}
return 0;//失败,返回0
}
//删除一个由 NewSTR 新建的数组,输入 p 为指向该数组的指针,count 是该数组长度,删除成功返回 1,否则返回0。


帮你改改吧
char* NewSTR(int count) {
if (count >= 1) {
char *p = NULL;
p = new(std::nothrow)char[count];
if (p == 0) return 0;
//for (int k = 0; k < count; k++) p[k] = NULL;
memset(p,0,count);//或者bzero(p,count);
return p;//成功,返回指针
}
//return 0;//失败  //这句多余
}
//新建一个字符数组,输入 count 为要新建的数组长度,返回值为该字符数组的地址。这个数组应由 DelSTR 来回收;


int DelSTR(char *p,int count) {
//if (count >= 1) {
if(p!=NULL){
//delete [count]p;
  delete []p;
p = NULL;
return 1;//成功,返回1
}
return 0;//失败,返回0
}

------解决思路----------------------
//新建一个字符数组,输入 count 为要新建的数组长度,返回值为该字符数组的地址。这个数组应由 DelSTR 来回收;
char* NewSTR(int count) {
    return (char *)calloc(count,sizeof(char));
}
void DelSTR(char *p) {//删除一个由 NewSTR 新建的数组,输入 p 为指向该数组的指针
    free(p);
}

------解决思路----------------------
引用:
如果直接 delete []p 的话是不是回收内存的时候会自动把整个数组收走(而不用手动指定数组长度)呢


是的
------解决思路----------------------
要管理字符串,用内存池之类的技术。
这个需要点技巧
或者直接用 string 类。每个字符串,一个string 简单方便。

C++ new ,delete;new[],delete[] 对,是不能部分释放内存的.
C malloc,realloc,calloc free,倒是可以