C++ 删除内存字段(数组)中的单个字节

C++ 删除内存字段(数组)中的单个字节,c++,memory,pointers,C++,Memory,Pointers,我有一个数组 int count=5; char * array; array=new char[count]; //now I want to do this: delete[1]->array+1; delete[1]->array+3; 我该怎么做呢 释放的内存不能再与程序关联,但是数组+0、数组+2和数组+4需要保持锁定状态 我想有一个共享内存块,它不与任何程序相关联,任何程序都可以使用它而无需特殊权限 这样做的目的是防止系统将此节分配给其他程序,或者至少降低它这样做

我有一个数组

int count=5;

char * array;
array=new char[count];

//now I want to do this:

delete[1]->array+1;
delete[1]->array+3;
我该怎么做呢

释放的内存不能再与程序关联,但是数组+0、数组+2和数组+4需要保持锁定状态

我想有一个共享内存块,它不与任何程序相关联,任何程序都可以使用它而无需特殊权限


这样做的目的是防止系统将此节分配给其他程序,或者至少降低它这样做的概率。

如果使用
new[]
操作符分配数组,则无法执行此操作。您需要做的是使用
malloc()
分配数组,使用
memmove()
删除字节,使用
realloc()
将数组重新分配到其大小减1,然后使用
free()
释放数组。

不能删除C/C++数组中的元素

但是,您可以有一个指针数组,并且只为所需的元素分配内存,其余的可以为空。然而,这改变了定义,它不再是字符数组,而是指向字符的指针数组


您试图实现什么?

正如其他建议的那样,严格地说,您向系统请求单个块(
count
element-wide),并且不能将其分块返回。 此外,还不清楚是否要保留剩余块的索引

实际上你有:

 addr.        a b c d e    
|____| ----> |_|_|_|_|_|
array         0 1 2 3 4
 addr.        a c e
|____|-----> |_|_|_|
array         0 1 2
您可以选择:

 addr.        a b c d e    
|____| ----> |_|_|_|_|_|
array         0 1 2 3 4
 addr.        a c e
|____|-----> |_|_|_|
array         0 1 2
通过执行另一个分配,复制要保留的值,并返回第一个块

否则,您必须根据需要更改整个模型

|____|----->|____|____|____|____|____|
               |    |    |    |    |
               V    V    V    V    V
              |_|  |_|  |_|  |_|  |_|
这样就可以根据需要进行更改

|____|----->|____|____|____|____|____|
               |    |    |    |    |
               V    V    V    V    V
              |_|   x   |_|   x   |_|

但这意味着要玩指针游戏。

就我个人而言,我建议你首先不要显式分配内存!<代码>新< /COD>和 Dele> <代码>操作人员被过度使用,特别是C++初学者。我认为自己是一个相当先进的C++用户,我很少在代码中使用这些操作符。如果我这样做,我将实现一些相当低级的代码。相反,您可以使用例如
std::string
,它支持从中间删除元素的函数:

std::string array(count);
array.erase(array.begin() + 1);
array.erase(array.begin() + 3);

您的意思是删除给定索引处的字符?不。我想释放内存。在您的示例中,您只分配了1块内存。是否希望每个字符单独分配?为什么要这样做?如果您告诉我们,我们可能会建议其他方法来归档您想要的内容。顺便说一句:请记住,C/C++(以及其他相关内容)使用额外内存进行动态内存分配,以跟踪分配的块,例如([size,next]yourdata),([size1,next1]yourdata1),([size2,next2]yourdata2)。。。这太简单了,但我希望你能理解,这些结构超过了你试图释放的1-2个字节。不过我希望控制物理内存。如果我没弄错的话,字符串擦除只是重新排列指针数组。没有操作系统在字节级别控制内存分配。它们都至少使用页面。在页面抽象之上,内存分配设施使用自己分配的内存块。。。而获得“物理”记忆几乎是不可能的。如果你解释一下你真正想做什么,而不是你认为该怎么做,也许会有所帮助。