-22

not 1私はintの配列を持っていて、そこにいくつの数字があるかを数えたい:

int* t = new int[50];
int counter = 1;
for(int i = 0; i < 50; i++){
    t[i] = i % 10;
    if((memcmp((void*)t[i], (void*)1, 4) != 0)){
        counter++;
    }
}

しかし、私は得るadress violation。それを機能させる方法... 高速に動作します。標準的なソリューションではなく、より高速なソリューションを知っていますか。いいえt[i]==1

編集:プログラムでサイズ362856427の配列を使用しているため、簡単にしたかったのです。

4

4 に答える 4

5

なぜこれをしないのですか:

int *t = new int[50];
int counter = 0; // <-- Shouldn't it be "0" at the beginning?
for (int i = 0; i < 50; i++) {
  if (t[i] != 1) {
    counter++;
  }
}
于 2013-05-05T14:56:53.303 に答える
2

アドレスに 1 をタイプキャストしています。これは、1 に対してではなく、アドレス 1 で比較していることを意味します。解決策は、 を作成int one = 1;してから、&one代わりに配置することです(void*)1

于 2013-05-05T14:54:18.057 に答える