为持有char *的整数分配动态内存
dynamic memory allocation for char * holding integers
当我动态分配内存到持有整数值的char*指针时,我是否需要为NULL终止总是分配一个额外的字节?
的例子:
// usually obtained a variable value by reading the header information from a binary file
int nElements = 1000;
// Do I need to allocate nElements+1 bytes here to hold a total of nElements integer values??
char* ptrData = new char[nElements];
假设我打开了一个二进制文件,并试图读取该文件的数据,如下所示://从二进制文件中读取-127到0范围内的数据
int nElementsRead = fread(ptrData, sizeof(char), nElements,ptrFile);
// is the above operation OK or overflown by 1 byte to add/handle the NULL termination?
//Process the data
int nInValidCount = 0;
for(int n=0; n< nElements; ++n)
if(ptrData[n] == 0) nInValidCount++;
// do I have any problem here??
delete[] ptrData;
是否有访问值或内存泄漏或内存溢出的问题?
在我的实际代码中,Data指针在不同的函数之间传递,并在最后的单独函数中删除。
谢谢你的帮助。
为n个字符分配内存:
char* c = new char[n];
可以包含长度不超过n
的字符。如果你想使用它与C-style
函数依赖于' '
,这个数组可能包含多达n -1
字符元素+终止' '
作为最后一个元素。
operator new
不插入' '
,你必须自己插入,operator new [n]
为n
元素分配空间(如果成功),而不是n + 1
。
-
Null终止用于c风格字符串。在你的情况下,你正在阅读从文件中取出n个字节,因此分配n个字节,所以我认为没有必要
-
没有内存泄漏,只要你确保你释放了
-
你说内存是在其他函数中释放的,如果您的程序退出(由于异常或逻辑退出)到达释放内存的函数。在这种情况下,会有
- for循环内部没有问题
No。一般来说,你不必这样做。唯一的问题是,之后当你尝试,比如说,打印char数组时,你必须已经知道要打印的大小。由于末尾没有' ',因此在没有被告知大小的情况下,没有其他方法可以知道所存储的字符数组的大小。
char* ptrData = new char[nElements];
将为您分配一个与nElements
完全相同的chars
数组-不包括NUL终止。如果是nElements = 1000
, char
会有1000个空格
如果你想手动添加