在c ++ fpermissive中从动态数组复制到另一个动态数组

Posted

技术标签:

【中文标题】在c ++ fpermissive中从动态数组复制到另一个动态数组【英文标题】:Copying from a dynamic array to another dynamic array in c++ fpermissive 【发布时间】:2016-10-15 20:11:57 【问题描述】:

我有一个数组,其大小在运行时确定。

cout<<"Enter size of array: ";
cin>>size1;
int* scores=new int[size1];

然后我填写这个数组分数。现在我想增加它的大小。我创建了一个新的动态数组。

int* newScores=new int[newSize1];  
such that `newSize1 > Size1

现在我将旧乐谱的内容复制到 newScores 中:

for(int i=0; i<Size1;i++)
newScores[i] = scores[i];

现在我必须要求 newScores 的剩余元素添加到它。 我做到了:

for(int j=size1;j<newSize1;j++)

newScores[j]=new int;
cout<<"Enter new score: ";
cin>>newScores[j];

编译时出现上述错误:error: invalid conversion from ‘int*’ to ‘int’ [-fpermissive] newScores[size1]=new int;

【问题讨论】:

这不是 Java。 newScores[j] = new int; 毫无意义。去掉它。那里已经有int 的空间。 C++ 不是 Java 或 C#。您只需创建对象,例如,使用 int() 而不是 new int(后者也会使值未初始化)。 【参考方案1】:

newScores[j]=new int; 是一个错误,没有必要。 newscores[j] 是一个价值 int,而 new int 返回 int*。但是您已经不需要分配它了 - 您在 int* newScores=new int[newSize1]; 表达式中进行了分配。

您可以使用std::vector&lt;int&gt; 避免麻烦。它会在您向其中插入元素时自动调整大小(使用push_back),您不必担心自己会释放内存。

【讨论】:

我不允许使用矢量。 然后删除不需要的行。 int* newScoresArrDyn = new int[newNumberOfScores]; if(newNumberOfScores&lt;=nscores) for(int i=0;i&lt;newNumberOfScores;i++) newScoresArrDyn[i] = scores[i]; 这部分为什么会产生分段错误? @SulavTimsina 您正在访问旧的 scores newNumberOfScores 次 - 那里没有那么多元素 我是怎么做到的?我没有在任何地方写过像 score[nweNumberOfScore] 这样的东西。我在粘贴箱中粘贴了我的代码。请看一看。 pastebin.com/vnhdyxMtpastebin.com/5TEvFw2zpastebin.com/RvMzxJVq【参考方案2】:

您无需再次将新的 int 分配给您的动态数组。另外,使用动态数组时需要使用delete[]来删除内存

【讨论】:

请看我的代码。 pastebin.com/vnhdyxMt pastebin.com/5TEvFw2z pastebin.com/RvMzxJVq【参考方案3】:

删除这一行

newScores[j]=new int;

【讨论】:

编译成功了吗? @HumamHelfawi 不,这应该会出现相同的错误(这是正确的)。 对不起,我以为是c#

以上是关于在c ++ fpermissive中从动态数组复制到另一个动态数组的主要内容,如果未能解决你的问题,请参考以下文章

字符数组的错误初始化字符串太长 [-fpermissive]

是否可以使用 sass 函数在媒体查询中从父宽度动态获取子高度? [复制]

在VB中从剪贴板复制到数组

为啥在 C 中为数组声明和指向数组声明的指针动态分配的内存不同? [复制]

如何在 C 中动态分配二维数组? [复制]

IOS - 如何在 Swift 3 中从 JSON 中捕获动态数组维度