|
|
1
42
代码:
是完全有效的C++。delete不知道也不关心以null结尾的字符串,所以你的错误一定是其他原因造成的。 |
|
2
8
然后,您将释放分配的内存。编译器将完全按照我们的预期处理它。由其分配的内存与以null结尾的字符串完全无关。你可以把你想要的一切都放进记忆里。这是一些“原始”存储块,您甚至可以在该内存中创建一些任意的C++对象(新位置)。 你的bug在别处。例如,一些常见的错误是这样的,构造函数被调用一次,但析构函数被调用两次,双重删除了一些东西:
现在,默认构造函数被调用一次,创建的对象被复制零次或多次。但是析构函数会为创建的每个副本运行。因此,您将多次调用指针上的析构函数,从而导致这种奇怪的错误。正确的修复方法
就是使用智能指针,比如
|
|
|
3
6
我认为你把一个普通的旧char数组和一个表示C风格字符串的char数组混淆了。C++delete运算符对C风格字符串数组毫不关心。它只会看到一个字符数组。这和删除一个int数组没有什么不同。
空终止符的存在与否仅与处理
|
|
|
4
3
这应该没关系。delete[]应用于删除动态分配的数组,而不管其内容如何。 |
|
|
5
1
据我所知,这应该很好。你分配了一块内存,操作系统应该跟踪它,并在被要求时能够释放它。将什么值放入已分配的缓冲区中根本不重要。
在字符数组中间粘贴NULL肯定会干扰C字符串函数,例如
|
|
|
6
0
错误可能是由更改的值引起的
|