使用动态内存删除数组中的重复项。分配

时间:2016-02-06 11:51:21

标签: c++ pointers dynamic-memory-allocation

这个方法是我的类集(大学)的成员函数,它有成员,Set(指针)和card(int)(基数)。我应该删除重复项并减少分配的内存。

nSet指针用于暂时保存数据。

不幸的是,无论何时召唤,它都会崩溃。 Wat do?

void remdup() {
    int *nSet;
    for(int x=0;x<card-1;x++) {
        for(int y=x+1;y<card;y++) {
            if(Set[x]==Set[y]) {
                for(int g=y;g<card-1;g++) {
                    Set[g]=Set[g+1];
                } card--;
            }
        }
    }
    nSet=new int[card];
    for( int u=0;u<card;u++) {
        nSet[u]=Set[u];
    }
    delete Set;
    Set=new int[card];
    for(int u=0;card;u++) {
        Set[u]=nSet[u];
    }

3 个答案:

答案 0 :(得分:1)

使用std::set而不是发明另一个更糟糕的设置。

答案 1 :(得分:1)

首先,我建议您使用 std::set 而不是自己动手。 除此之外,如果您将for(int u=0;card;u++)更改为for(int u=0;u<card;u++),则在代码的末尾会有效。 但是如果您想自己完成所有工作并缩小int数组,则应使用std::memcpy将数据从旧动态内存复制到新动态内存:

#include <cstring> // memcpy

int *nSet = new int[card];
std::memcpy( nSet, Set, card );
delete [] Set;
Set = nSet;

答案 2 :(得分:0)

你的for循环中有错误。 Paint paint = new Paint(); paint.setStyle(Paint.Style.STROKE); paint.setColor(Color.BLUE); paint.setStrokeWidth(10); Bitmap b = Bitmap.createBitmap(300, 300, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b); RectF rectF = new RectF(); rectF.set(5,5,250,250); c.drawRoundRect(rectF, 10, 10, paint); imgView.setImageBitmap(b);

for(intialization;condition;increment)  {}