2012-01-04 20 views
0

私はCで書かれています。C++やCではなく 関数内で追加の配列を開き、すべての要素に0を入れてもいいですか? は1行だけですか?現時点では 関数内の宣言

私が持っているエラー

エラー1エラーC2065: '新しい':宣言されていない識別子

エラー3エラーC2143:構文エラー:見つかりません ';' 'タイプ'の前に

エラー4エラーC2143:構文エラー: ';'が見つかりません。 「[」

同じ場所ですべてのエラーの前に - 新しい配列

void dup(int a[], int n) 
{ 
    int i; 
    int *t = new int[n]; 

    for(i=0; i<=n; i++) 
     t[i] = 0; 

    for(i=0;i<n;i++) 
     t[a[i]]++; 
} 

答えて

4

stdlib.hcallocを使用してみてください:

int *t = calloc(n, sizeof *t); 
if (!t) { 
    perror("calloc"); 
    return; 
} 
3

新しいの宣言では、C++やC#に特定のキーワードがあり、かつC.

で使用することはできません

Cのヒープ上のメモリは、主に関数mallocによって割り当てられ、関数freeを使用して解放されます。

callocは、mallocのバージョンで、返される前にメモリもゼロになっています。

callocは、配列要素の数と各配列要素のサイズの2つの引数をとります。

例えば、

int i = 10; 
int* p = calloc(i,sizeof(int)); 

http://www.cplusplus.com/reference/clibrary/cstdlib/calloc/

+3

んで見つかりました。 –

+0

@KeithThompsonありがとう。あなたは空のポインタを投げつける必要はなかったことを決して思い出さない。 – Dunes

2

Cはnew、唯一のC++を持っていません。

使用のcalloc代わりに、Cには `malloc`または` calloc`の結果をキャストするべきではありません、<stdlib.h>

int *t = calloc(n, sizeof(int));