char *p;
p=new char (15);
strcpy(p,"abcdefgefg");
strcat(p,"eeeeeeeeeeeeeeeee");
这样肯定超出内存。但我又不知道怎么做。把15 该为更大的数 太浪费内存,我不想这么做。我想请问还有没有更好的做法。
在c中有realloc 可以增加已分配的存储块大小。但是new 和realloc 可以同时使用吗?
如果同时使用,那释放怎么办,delete 还是free;
11 个解决方案
#1
想不出还有什么方法。
new 只能和 delete匹配,new 和realloc 要避免同时使用,或者就不要使用realloc了,它不安全,c++只是为了兼容才允许用alloc 和 free.
new 只能和 delete匹配,new 和realloc 要避免同时使用,或者就不要使用realloc了,它不安全,c++只是为了兼容才允许用alloc 和 free.
#2
笼统来说,malloc和free是C风格的,new和delete是C++风格的,malloc和free(会产生问题的原因在于他们不知道构造函数和析构函数。关于详细讲解,可以参考effective C++条款3。
关于你的第一个问题,好像在你的例子里面,一开始申请大一点的空间浪费不了多少空间吧,除非你的内存少的可怜。如果非要实现,建议另申请一块空间存放连接以后的字符串,然后吧P释放掉,这样就不存在浪费空间的问题了。
我是这样想的,也许还有更好的方法。
关于你的第一个问题,好像在你的例子里面,一开始申请大一点的空间浪费不了多少空间吧,除非你的内存少的可怜。如果非要实现,建议另申请一块空间存放连接以后的字符串,然后吧P释放掉,这样就不存在浪费空间的问题了。
我是这样想的,也许还有更好的方法。
#3
要方便实用用数组,要经济耐用用链表。
#4
先delete掉,再new一个更大的!
#5
但我想保留*p原来的内容啊.程序只是个例子。
我想问
有没有可以既保留数据又能在此基础上增加数据的方法。
内存不够,再动态增加内存。
我想问
有没有可以既保留数据又能在此基础上增加数据的方法。
内存不够,再动态增加内存。
#6
参考vector的设计方法吧。
#7
对了,要善用STL的容器组件,有好处。
字符串可以用string,数组用vector。
字符串可以用string,数组用vector。
#8
自己编一个realloc
****************************************************
明天会怎样?
****************************************************
明天会怎样?
#9
只有用链表了
#10
STL的容器组件是一种现成的方法。
CString类在处理这种情况时也是使用,delete 再 new
char *p;
表示字符串时,不可以使用链表的,
因为,所有的字符串为参数的函数,都是认为它指向的是连续的内存块,且是以NULL结尾的。
不要津津计较了,干大事的人应该不拘小节的。
在送你一句话,
滴水穿石,铁杵成针。你也可以把所有的相关函数重写!!!!
CString类在处理这种情况时也是使用,delete 再 new
char *p;
表示字符串时,不可以使用链表的,
因为,所有的字符串为参数的函数,都是认为它指向的是连续的内存块,且是以NULL结尾的。
不要津津计较了,干大事的人应该不拘小节的。
在送你一句话,
滴水穿石,铁杵成针。你也可以把所有的相关函数重写!!!!
#11
TO fly_hyp(大鹏) :
1、 "delete 再 new "
——还要有重新COPY先前数据的过程,个人认为这可能是最耗时的地方。
2、“表示字符串时,不可以使用链表的”
——用链表当然是可以的,比如下面的结构:
sturct Node
{
char str[128];
Node *next;
};
128不够了就new,有何不可。至于结束符'\0',和普通字串没有什么区别,当然用个变量专门保存其长度也未尝不可。
话又说回来,既然有STL,有String, 还是建议用现成的东东方便,当然你要想知道其原理(用new 和 delete, 可不是链表;链表方法仅供参考),我也很赞同自己把相关函数重写。
其它很同意 fly_hyp(大鹏) 的说法。
1、 "delete 再 new "
——还要有重新COPY先前数据的过程,个人认为这可能是最耗时的地方。
2、“表示字符串时,不可以使用链表的”
——用链表当然是可以的,比如下面的结构:
sturct Node
{
char str[128];
Node *next;
};
128不够了就new,有何不可。至于结束符'\0',和普通字串没有什么区别,当然用个变量专门保存其长度也未尝不可。
话又说回来,既然有STL,有String, 还是建议用现成的东东方便,当然你要想知道其原理(用new 和 delete, 可不是链表;链表方法仅供参考),我也很赞同自己把相关函数重写。
其它很同意 fly_hyp(大鹏) 的说法。
#1
想不出还有什么方法。
new 只能和 delete匹配,new 和realloc 要避免同时使用,或者就不要使用realloc了,它不安全,c++只是为了兼容才允许用alloc 和 free.
new 只能和 delete匹配,new 和realloc 要避免同时使用,或者就不要使用realloc了,它不安全,c++只是为了兼容才允许用alloc 和 free.
#2
笼统来说,malloc和free是C风格的,new和delete是C++风格的,malloc和free(会产生问题的原因在于他们不知道构造函数和析构函数。关于详细讲解,可以参考effective C++条款3。
关于你的第一个问题,好像在你的例子里面,一开始申请大一点的空间浪费不了多少空间吧,除非你的内存少的可怜。如果非要实现,建议另申请一块空间存放连接以后的字符串,然后吧P释放掉,这样就不存在浪费空间的问题了。
我是这样想的,也许还有更好的方法。
关于你的第一个问题,好像在你的例子里面,一开始申请大一点的空间浪费不了多少空间吧,除非你的内存少的可怜。如果非要实现,建议另申请一块空间存放连接以后的字符串,然后吧P释放掉,这样就不存在浪费空间的问题了。
我是这样想的,也许还有更好的方法。
#3
要方便实用用数组,要经济耐用用链表。
#4
先delete掉,再new一个更大的!
#5
但我想保留*p原来的内容啊.程序只是个例子。
我想问
有没有可以既保留数据又能在此基础上增加数据的方法。
内存不够,再动态增加内存。
我想问
有没有可以既保留数据又能在此基础上增加数据的方法。
内存不够,再动态增加内存。
#6
参考vector的设计方法吧。
#7
对了,要善用STL的容器组件,有好处。
字符串可以用string,数组用vector。
字符串可以用string,数组用vector。
#8
自己编一个realloc
****************************************************
明天会怎样?
****************************************************
明天会怎样?
#9
只有用链表了
#10
STL的容器组件是一种现成的方法。
CString类在处理这种情况时也是使用,delete 再 new
char *p;
表示字符串时,不可以使用链表的,
因为,所有的字符串为参数的函数,都是认为它指向的是连续的内存块,且是以NULL结尾的。
不要津津计较了,干大事的人应该不拘小节的。
在送你一句话,
滴水穿石,铁杵成针。你也可以把所有的相关函数重写!!!!
CString类在处理这种情况时也是使用,delete 再 new
char *p;
表示字符串时,不可以使用链表的,
因为,所有的字符串为参数的函数,都是认为它指向的是连续的内存块,且是以NULL结尾的。
不要津津计较了,干大事的人应该不拘小节的。
在送你一句话,
滴水穿石,铁杵成针。你也可以把所有的相关函数重写!!!!
#11
TO fly_hyp(大鹏) :
1、 "delete 再 new "
——还要有重新COPY先前数据的过程,个人认为这可能是最耗时的地方。
2、“表示字符串时,不可以使用链表的”
——用链表当然是可以的,比如下面的结构:
sturct Node
{
char str[128];
Node *next;
};
128不够了就new,有何不可。至于结束符'\0',和普通字串没有什么区别,当然用个变量专门保存其长度也未尝不可。
话又说回来,既然有STL,有String, 还是建议用现成的东东方便,当然你要想知道其原理(用new 和 delete, 可不是链表;链表方法仅供参考),我也很赞同自己把相关函数重写。
其它很同意 fly_hyp(大鹏) 的说法。
1、 "delete 再 new "
——还要有重新COPY先前数据的过程,个人认为这可能是最耗时的地方。
2、“表示字符串时,不可以使用链表的”
——用链表当然是可以的,比如下面的结构:
sturct Node
{
char str[128];
Node *next;
};
128不够了就new,有何不可。至于结束符'\0',和普通字串没有什么区别,当然用个变量专门保存其长度也未尝不可。
话又说回来,既然有STL,有String, 还是建议用现成的东东方便,当然你要想知道其原理(用new 和 delete, 可不是链表;链表方法仅供参考),我也很赞同自己把相关函数重写。
其它很同意 fly_hyp(大鹏) 的说法。