【发布时间】:2012-03-06 18:59:25
【问题描述】:
您好,我的问题有点难以解释,所以我将在这里发布我的代码部分并用一个示例来解释问题。
这里的代码有一个大数组和一个小数组,其中大数组被分成小部分,存储在小数组中,小数组在屏幕上输出其内容。
然后我释放小数组的分配内存并用大数组的下一部分再次初始化它:
//this code is in a loop that runs until all of the big array has been copied
char* splitArray = new char[50];
strncpy(splitArray, bigArray+startPoint, 50); //startPoint is calculated with every loop run, it marks the next point in the array for copying
//output of splitArray on the screen here
delete splitArray;
//repeat loop here
现在我的问题是输出的字符串每次都有一些随机符号。例如"some_characters_here...last_char_hereRANDOM_CHARS_HERE".
在深入研究之后,我发现 splitArray 实际上的大小不是 50,而是 64,空终止符为 64。 所以当我从 bigArray 复制到 splitArray 时,在真实字符串之后仍然有 14 个随机字符,当然我不想输出它们。
一个简单的解决方案是手动将 splitArray 中的空终止符设置为 [50],但随后程序无法再次删除该数组。
谁能帮我找到解决方案?最好有一些示例代码,谢谢。
【问题讨论】:
-
应该是
delete[],而不是delete。这几乎肯定会导致与内存相关的问题。 -
一件事:
delete splitArray;应该是delete[] splitArray; -
哇这么短的时间里有这么多答案,我什至不知道该回答哪一个,但非常感谢大家;)在C++中使用字符串更好吗?因为我需要一个 char* 来输出数组。为什么在我这样初始化数组时使用 delete[] 更好?一些解释的链接就足够了,但如果你愿意,你也可以在这里解释
标签: c++ arrays null char terminator