문제

'char [2]', 즉 2 숯의 정적 배열을 보유하는 구조를 만들어야합니다.

내 질문은 x 수의 char [2]에 대한 메모리를 어떻게 할당 하는가입니다.

나는 이것을 시도했다 (int x가 정의되었다고 가정) :

char** m = NULL;
m = new char[x][2];
...
delete [] m;

(작동하지 않았다)

나는 std :: 벡터를 사용할 수 있다는 것을 알고 있습니다u003Cchar[2]> 컨테이너로서, 그러나 나는 그것이 생 포인터로 어떻게 이루어질 것인지 궁금합니다.

나는 C ++를 처음 접하고 배우려고 노력하고 있습니다.

도움이 되었습니까?

해결책

코드에서 'M'유형은 '새'호출과 일치하지 않습니다. 당신이 원하는 것은 :

char (*m)[2] = NULL;
m = new char[x][2];
...
delete [] m;

M은 2 숯의 배열에 대한 포인터이며, 새로운 호출을 위해 2 숯의 x 배열을 얻고 첫 번째 char에서 point m을 얻을 수 있습니다.

다른 팁

다음 코드는 char[n][2]:

typedef char wchar[2];   // array of two chars
const size_t n = 100;    // some const
wchar* x = new wchar[n]; // array of wchars, where wchar is array of two chars

// here is still a problem that you could write the following
x[5][5] = 0;             // not what you expected?

delete[] x;              // clean up

WCHAR의 내부 구조를 알고 있으면 다음과 같이 선언하면 코드가 더 읽을 수 있습니다.

// using struct is just gives names to chars in wchar, without performance drop
struct wchar {
  char h;
  char l;
};

...

const size_t n = 100;    // some const
wchar* x = new wchar[n]; // array of wchars

x[0].h = 0;
x[0].l = 0;

delete[] x;              // clean up

마지막으로 C ++를 사용하기 때문에 C 배열을 사용할 필요가 없습니다.

const size_t n = 100;    // some const   
typedef std::tr1::array<wchar, n> my_arr;
my_arr* x = new my_arr;

(*x)[0].h = 0;
(*x)[0].l = 0;

delete x;

컴파일 타임 범위 점검을 통한 더 안전한 옵션 중 하나 :

template<int n_max>
struct array_n {
    char v[2*n_max];

    template<size_t n, size_t s> 
    char& get() {
        BOOST_STATIC_ASSERT( s < 2 );
        BOOST_STATIC_ASSERT( n < n_max );
        return v[n*2+s];
    };  
};

int main( int argc, char**argv)
{
    const size_t n = 100;    // some const   
    typedef array_n<100> my_arr;
    my_arr* x = new my_arr;

    x->get<10, 1>() = 0;   // ok
    x->get<50, 0>() = 0;   // ok
    x->get<10, 2>() = 0;   // compile time error
    x->get<500, 0>() = 0;  // compile time error

    delete x;
}

배열의 크기를 결정한 다음 새로 사용하여 2 차원 배열로 취급합니다.

그러나 이것에 대한 좋은 토론을 위해 다음을보고 싶을 수도 있습니다.http://www.velocityreviews.com/forums/t283481-dynamic-multidemensional-arrays.html

unsigned x=10;
typedef char A2[2];
A2 *m=new A2[x];
m[0][1]='a';
m[9][0]='b';
delete[] m;

C 다차원 배열 (첫 번째 치수를 제외한 모든 차원이 일정)이 연속적으로 배치됩니다.

1D 배열의 1D 배열 인 (잠재적으로 들쭉날쭉 한) 다차원 배열을 원한다면 다음을 반복해야합니다.

  char **m=new char *[x];
  for (unsigned i=0;i<x;++i) m[i]=new char[2];
  ...
  for (unsigned i=0;i<x;++i) delete[] m[i];
  delete[] m;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top