增加动态数组后,打印动态数组

时间:2013-04-11 12:23:05

标签: c++ dynamic-arrays

我目前正在使用动态数组在MU游戏上制作代码,我在打印序列时遇到了问题。

规则:如果第一个字符由字符M表示,而其余序列由R表示,则新序列为MRR。

示例包括:

  

当前序列:MIUI

     

新序列:MIUIIUI

     

当前序列:MUM

     

新序列:MUMUM

     

当前序列:MU

     

新序列:MUU

以下是我的代码片段:

主要:

if (userchoice == 2)
{
    if (rule2valid == false)
    {
        cout << "This rule may not be applied to your input." << endl;
        return 0;
    }       
    int newsize = size + size - 1;
    char *resultant = new char[newsize];
    resultant = applyRule2(userinput, size);
    printarray (resultant, newsize);
}   

在应用规则的函数中:

char *applyRule2(char* sequence, int size)
{
int newsize = size + size - 1;
int j = 1;

char* applyRule = new char[newsize];
for (int i = 0; i < size; i++)
    applyRule[i] = sequence[i];
for (int i = size; i < newsize; i++)
{
    applyRule[i] == sequence[j];
}   
return applyRule;
}

和打印功能:

void printarray(char* sequence, int size)
{
for (int i = 0; i < size; i++){
cout << sequence[i] << "\t";    
}
cout << "The length of this array is : " << size;
cout << endl;
}

问题是当我运行程序时,我的输出是这样的:

  

输入:M U M

     

输出:M U M,此字符串的长度为5.(应该是M U M U M)

     

输入:M I U I

     

输出:M I U I,这个字符串的长度是7.(应该是M I U I I U I)

到目前为止,我所做的是我分配了一个具有新大小的新动态数组,并相应地将值添加到数组中。但是,我不知道问题出在applyRule2函数还是printarray函数中。

如果有人能指出我正确的方向,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

只使用std::string而不是原始数组和原始指针new

答案 1 :(得分:0)

您的代码中存在一些错误。正如Alf所说,你真的应该使用std::string。但无论如何这里有一些错误。

for (int i = size; i < newsize; i++)
{
    applyRule[i] == sequence[j];
}

应该是

for (int i = size; i < newsize; i++)
{
    applyRule[i] = sequence[j];
}

当你应该写一个等于==时,你有一个双等于=。您的编译器应该已经警告过您,请注意编译器警告。

另一个错误

char *resultant = new char[newsize];
resultant = applyRule2(userinput, size);

应该是

char *resultant = applyRule2(userinput, size);

您编写的代码会分配一​​些内存,然后在下一行中抛弃该内存,而是使用您在applyRule2中分配的内存。所以这实际上不是一个bug,但它浪费了资源。你的程序永远不会收回浪费的内存。这称为内存泄漏