为什么删除运算符崩溃 [英] why delete operator crashes
问题描述
Hello Folks,
我需要按如下方式操作char字符串列表,但是当我想要
删除最后用new创建的指针时,删除操作员崩溃,任何
想法?
char * list [2000];
while(...)
{
list [MyCounter] = new char [Stringlength];
strncpy(list [MyCounter],c_TempFilename,Stringlength);
list [MyCounter] [Stringlength] =''\ 0'';
MyCounter ++;
}
for(i = 0; i< MyCounter; i ++)
{
delete [] list [i];
}
提前感谢大家。
Hello Folks,
I need to manipulate a list of char strings as follows, but when I want to
delete the pointer created with new at the end, delete operator crashes, any
idea?
char* list[2000];
while(...)
{
list[MyCounter] = new char [Stringlength];
strncpy(list[MyCounter], c_TempFilename, Stringlength);
list[MyCounter][Stringlength] = ''\0'';
MyCounter++;
}
for (i=0; i<MyCounter;i++)
{
delete [] list[i];
}
Thanks Everybody in advance.
推荐答案
Nemo写道:
Nemo wrote:
char * list [2000];
添加以下行:
断言(NULL == list [0]);
它可能会失败。
(它也可能通过,所以不要只依赖它。)
for(i = 0; i< MyCounter; i ++)
{
删除[]列表[i];
}
char* list[2000];
Add this line:
assert(NULL == list[0]);
It might fail.
(It also might pass, so don''t rely only on it.)
for (i=0; i<MyCounter;i++)
{
delete [] list[i];
}
您可以删除[] a空指针。但是你不应该删除一个
垃圾指针;一个包含未被new返回的未定义值。
所有未初始化的堆栈变量和堆变量都包含垃圾。总是
初始化,至少像这样:
char * list [2000] = {NULL};
现在学习使用std :: string并停止使用原始
指针编写高风险代码!
-
Phlip
http://www.greencheese.org/ZeekLand < - 不是博客!!!
You are allowed to delete[] a NULL pointer. But you should not delete a
garbage pointer; one containing an undefined value not returned by new.
All uninitialized stack variables and heap variables contain garbage. Always
initialize, at least like this:
char *list[2000] = { NULL };
Now learn to use std::string and stop writing high-risk code with raw
pointers!
--
Phlip
http://www.greencheese.org/ZeekLand <-- NOT a blog!!!
On Thu,2006年2月23日15:26:35 -0500,Nemo写道:
On Thu, 23 Feb 2006 15:26:35 -0500, Nemo wrote:
char * list [2000];
while(...)
{
list [MyCounter] = new char [Stringlength];
应该是:
list [MyCounter] = new char [Stringlength + 1];
strncpy( list [MyCounter],c_TempFilename,Stringlength);
....因为你最后坚持0。
list [MyCounter] [Stringlength] =''\'0' ';
MyCounter ++;
}
char* list[2000];
while(...)
{
list[MyCounter] = new char [Stringlength];
Should be:
list[MyCounter] = new char [Stringlength+1];
strncpy(list[MyCounter], c_TempFilename, Stringlength);
....since you''re sticking a 0 on the end.
list[MyCounter][Stringlength] = ''\0'';
MyCounter++;
}
- Jay
- Jay
在文章< dt**********@dns3.cae.ca> ;,Nemo < nemo@no_email.com>
写道:
In article <dt**********@dns3.cae.ca>, "Nemo" <nemo@no_email.com>
wrote:
Hello Folks,
我需要按如下方式操作char字符串列表,但是当我想要删除最后用new创建的指针时,删除操作符崩溃,任何想法?
char * list [2000];
while( ...)
{list [MyCounter] = new char [Stringlength];
strncpy(list [MyCounter],c_TempFilename,Stringlength);
list [MyCounter] [Stringlength ] =''\''';
关闭一个错误,列表[MyCounter]在[Stringlength]没有元素。
MyCounter ++;
}
for(i = 0; i< MyCounter; i ++)
{
删除[] list [i];
}
谢谢大家提前。
Hello Folks,
I need to manipulate a list of char strings as follows, but when I want to
delete the pointer created with new at the end, delete operator crashes, any
idea?
char* list[2000];
while(...)
{
list[MyCounter] = new char [Stringlength];
strncpy(list[MyCounter], c_TempFilename, Stringlength);
list[MyCounter][Stringlength] = ''\0'';
Off by one error, list[MyCounter] has no element at [Stringlength].
MyCounter++;
}
for (i=0; i<MyCounter;i++)
{
delete [] list[i];
}
Thanks Everybody in advance.
以上问题可能会破坏您删除的任何代码
运营商需要删除数组。
我强烈建议你使用std :: string。
std :: vector< std :: string>列表;
while(...)
{
list.push_back(std :: string(c_TempFilename));
}
//无需删除。
-
魔术取决于传统和信仰。它不欢迎观察,
也不会通过实验获利。另一方面,科学的经验基于
;它可以通过观察和实验进行校正。
The above problem is probably clobbering whatever code your delete
operator needs in order to delete the array.
I strongly suggest you use std::string.
std::vector<std::string> list;
while ( ... )
{
list.push_back( std::string( c_TempFilename ) );
}
// no delete needed.
--
Magic depends on tradition and belief. It does not welcome observation,
nor does it profit by experiment. On the other hand, science is based
on experience; it is open to correction by observation and experiment.
这篇关于为什么删除运算符崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!