Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我还是不知道';我不懂C++;新操作员[](或新操作员[]) 我通常回避不必要的C++特性,但随着时间的推移,我无法避免面对我的灰色。最新的是operator new[]和潜在的内存问题 char *playerNewNames = new char[numPlayers][50];_C++_New Operator - Fatal编程技术网

我还是不知道';我不懂C++;新操作员[](或新操作员[]) 我通常回避不必要的C++特性,但随着时间的推移,我无法避免面对我的灰色。最新的是operator new[]和潜在的内存问题 char *playerNewNames = new char[numPlayers][50];

我还是不知道';我不懂C++;新操作员[](或新操作员[]) 我通常回避不必要的C++特性,但随着时间的推移,我无法避免面对我的灰色。最新的是operator new[]和潜在的内存问题 char *playerNewNames = new char[numPlayers][50];,c++,new-operator,C++,New Operator,很高兴知道我们不需要这么多的指针*间接寻址,我对使用malloc进行C迭代很有信心,但上面的步骤似乎太远了。我的编译器没有抱怨,但我想确定我将得到一个大小为numPlayers的数组,每个数组的索引长度为50个字符。我该如何解除分配 我将尝试delete[][],但即使没有抛出,它也不会100%地清除所有内容,而不会对我进行迭代。请有人解释一下。提前感谢。解除分配数组的唯一正确方法是使用delete[] delete解除分配单个对象,而delete[]解除分配对象数组。 没有delete[][]

很高兴知道我们不需要这么多的指针
*
间接寻址,我对使用
malloc
进行C迭代很有信心,但上面的步骤似乎太远了。我的编译器没有抱怨,但我想确定我将得到一个大小为
numPlayers
的数组,每个数组的索引长度为50个字符。我该如何解除分配


我将尝试
delete[][]
,但即使没有抛出,它也不会100%地清除所有内容,而不会对我进行迭代。请有人解释一下。提前感谢。

解除分配数组的唯一正确方法是使用
delete[]

delete
解除分配单个对象,而
delete[]
解除分配对象数组。
没有
delete[][]
delete[][][]
解除分配数组的唯一正确方法是使用
delete[]

delete
解除分配单个对象,而
delete[]
解除分配对象数组。
没有这样的事情,比如
delete[][]
delete[][][]
char*playernownames=new char[numPlayers][50]是一个错误。您应该得到一个编译器错误。正确的语法是:

char (*playerNewNames)[50] = new char[numPlayers][50];
并将其删除:

delete[] playerNewNames;

但是,更好的选择是不使用C样式的数组,也不使用
new
。相反,请使用容器类来管理内存,例如
std::vector
std::array

char*playernownames=new char[numPlayers][50]是一个错误。您应该得到一个编译器错误。正确的语法是:

char (*playerNewNames)[50] = new char[numPlayers][50];
并将其删除:

delete[] playerNewNames;

但是,更好的选择是不使用C样式的数组,也不使用
new
。相反,使用容器类为您管理内存,例如
std::vector
std::array

看起来您需要一个数组数组

在我看来,最可读的方法是使用类型别名

typedef char PlayerName[50];

PlayerName* playerNewNames = new PlayerName[numPlayers];

delete [] playerNewNames;
如果你想要一个指向数组的指针数组,你需要迭代,但是因为你想要所有的“内部”数组都有相同的大小,并且在编译时就知道了,这看起来是个坏主意


了解
std::vector
std::array

看起来您需要一个数组数组

在我看来,最可读的方法是使用类型别名

typedef char PlayerName[50];

PlayerName* playerNewNames = new PlayerName[numPlayers];

delete [] playerNewNames;
如果你想要一个指向数组的指针数组,你需要迭代,但是因为你想要所有的“内部”数组都有相同的大小,并且在编译时就知道了,这看起来是个坏主意


了解
std::vector
std::array

不要使用
new
。对于恒定大小的数组使用
std::array
,对于动态数组使用
std::vector
。就这么简单。我知道字符数组是不受欢迎的,但我依赖于很多旧代码,这些代码使我的生活更容易继续使用。注意:对于您的情况,问题的注释适用。没有
运算符new[][]
运算符delete[][]
。有
操作员新建[]
操作员删除[]
但您不应该使用它们。使用
std::vector
。远离
new
是个好主意,继续做下去!使用为您管理内存的容器。不要使用
new
。对于恒定大小的数组使用
std::array
,对于动态数组使用
std::vector
。就这么简单。我知道字符数组是不受欢迎的,但我依赖于很多旧代码,这些代码使我的生活更容易继续使用。注意:对于您的情况,问题的注释适用。没有
运算符new[][]
运算符delete[][]
。有
操作员新建[]
操作员删除[]
但您不应该使用它们。使用
std::vector
。远离
new
是个好主意,继续做下去!使用为您管理内存的容器。关于编译器错误,您是对的,我没有正确地同步磁盘
char(*playernownames)[50]
谢谢,这就是我缺少的代码:)关于编译器错误,你是对的,我没有正确地同步我的磁盘<代码>字符(*playernownames)[50]
谢谢,这就是我缺少的代码:)