2012-10-10 9 views
1

나는 이것에 관해 많은 게시물을 읽었지만 내 문제는 좀 더 구체적인 것으로 보인다. 나는 동적 인 2D 배열을 할당 할 수있을 것이라고 생각한다.정적 배열의 동적 배열에 대한 메모리 할당

기존 코드로 인해 정적 배열 인 typedef을 사용해야합니다. 이제 나는 알 수없는 수의 배열을 임시로 저장하려고합니다. 포인터를 사용하여 여러 변형을 시도했지만 컴파일도 할 수 없습니다.

다음 코드는 내가 할 노력하고있어 설명해야한다 : 이것은 가장 적은 오류가있는 내 버전입니다

int      iCount, i; 
typedef unsigned char Buffer[1024]; 

Buffer  *   BufferArray=NULL; 

BufferArray = malloc(iCount * sizeof Buffer*); 

for(i=0;i<iCount;i++) 
{ 
    BufferArray[i] = malloc(sizeof(Buffer)); 
} 

. 단 하나의 왼쪽

오류 C2106입니다 : '='왼쪽 피연산자는 내가이 주제는 지루 알고 충분히 자주 발생 리터 값을

을해야합니다. 하지만, 이미 정적 배열 인 typedef과 혼동을 느낍니다. 그래서 나는 ** 포인터가 필요 없다고 생각했다.

감사합니다. typedef를 당신을 혼동하는 경우

+0

사이드 노트 : 사용자가 의도하지 않은 것일 수있는'BufferArray [i]'대신'BufferArray [iCount]'에 할당하고 있습니다. – Shahbaz

+0

사이드 노트 : 위의 코드는 실제 코드가 될 수 없으며 컴파일되지 않습니다. 나는 'iCount * sizeof Buffer *'를 믿지 않는다. – unwind

+0

오른쪽, shoulb [i]. @unwind : 내가 쓴 것처럼, 컴파일되지 않는다. –

답변

2

, 다음 (머리에) 제거 : 우리가 Buffer를 볼 때

typedef unsigned char Buffer[1024]; 

그래서, [1024]의 부호없는 char 배열로 생각합니다.

Buffer * BufferArray=NULL; // really it's: unsigned char[] * 

이제는 알 수없는 수의 배열을 고수하려고합니다. 그럼 당신은 정말 정적 배열 개최 발생 2 차원 동적 배열, 단 하나의 동적 배열 사용하지 : 이제 BA

typedef unsigned char Buffer[1024]; 

int main(void) { 
    Buffer * BA = NULL; 
    int iCount = 5; 
    BA = malloc(iCount * sizeof(Buffer)); 
    BA[0][0] = 10; 
    return 0; 
} 

을 일시적 정적 서명 숯불의 iCount 수를 보유하는 데 사용할 수있는 동적으로 생성 된 배열입니다 어레이 (Buffer).

0

동적 배열의 요소를 정적 배열에서 동적 배열로 복사하려는 경우. 아래 간단한 해결책이 있습니다.

#include<stdio.h> 
#include<malloc.h> 
#define r 2 
#define c 5 

int main() 
{ 
    char *p; 
    char a[r][c]; 
    int i,j; 

    p=(char*)malloc(r*c*sizeof(char)); 
    gets(p); 
    puts(p); 

    while(*p!='\0') 
    { 
     for(i=0;i<=r-1;i++) 
     { 
      for(j=0; j<=c-1; j++) 
      { 
       a[i][j] =* p; 
       ("%c",a[i][j]); 
       p++; 
      } 
     } 
    } 
    printf("\n"); 
    return (0); 
}