2009-11-01 2 views
0

버퍼 배열을 만들려고합니다. 각 버퍼에 정수를 저장해야합니다. 어떻게해야하는지 잘 모르겠습니다.C 프로그래밍의 버퍼 배열?

int BUFFER_LENGTH = 50; //the size of each buffer 
int numberOfBuffers = 10; //number of buffers 
int *pBuffers;   //array of buffers 

    pBuffers = (int *) calloc (numberOfBuffers, sizeof(int)); //make array size of numberOfBuffers 

    int i; 
    for (i = 0; i < n; i++){  //initialize each buffer to zero. 
     &pBuffers[i] = 0x00; 
    } 

내가 잘못하고있는 것은 무엇입니까? 이 코드는 실제로 작동하지 않습니다.

+0

: 물론

는 쉬운 일이 각 버퍼의 크기가 상수가 스택에 넣어하는 것입니다 될 것입니다 알고 있다면 (당신이 상수로 INT 크기있어 변경) 잠깐, 여기서 BUFFER_LENGTH의 목적은 무엇입니까? 각 버퍼가 여러 정수를 저장합니까? 아니면 버퍼가 단일 정수만 저장합니까? 또한 for 루프에서'n'은 무엇입니까? 버퍼를 초기화하기 위해'memset'을 사용하지 않는 이유가 있습니까? – Amber

+0

각 버퍼에 하나의 정수만 저장해야합니까? '& pBuffers [i]'는 과제 스테이션 왼쪽에있을 수 없습니다. –

+0

n의 값은 무엇입니까? – dicroce

답변

4

충분한 공간을 할당 할 수 있습니다. 바로 거기에 10 ints만큼 충분한 공간을 할당합니다. 당신이 500을 위해 충분히 할당하고 싶어하는 것처럼 보입니다. 간단한 방법은 int buffers[10][50]입니다. 그러나 당신이 calloc하고 싶다면, 당신은 calloc(BUFFER_LENGTH, sizeof(int))numberOfBuffers 번해야합니다.

또한 calloc은 할당 된 메모리를 자동으로 지우므로이를 수행 할 필요가 없습니다.

#define BUFFER_LENGTH 50 /* the size of each buffer */ 
#define BUFFERS 10  /* number of buffers  */ 
int **pBuffers;   /* array of buffers  */ 

pBuffers = calloc (BUFFERS, sizeof(int *)); //make array of arrays 
int i; 
for (i = 0; i < BUFFERS; i++) { 
    pBuffers[i] = calloc(BUFFER_LENGTH, sizeof(int)); // make actual arrays 
} 
+0

이것은 올바른 배열 때마다 새 버퍼를 만들어야했습니다. – user69514

+0

어떻게 각 버퍼를 0으로 초기화합니까? 다음과 같은 오류가 발생합니다 : functions.h : 28 : 경고 : 할당 캐스팅없이 포인터에서 정수를 만듭니다 그래서 각 요소를 인쇄하려고하면 세그먼트 화 오류가 발생합니다 – user69514

+0

calloc이 할당 된 메모리를 0으로 만듭니다. – jmucchiello

0

나는 C 매우 녹슨,하지만 난 당신이

pBuffers[i] = 0x00; 

합니다 ([내가] 당신이 이미 위치 에서 항목을 액세스하는 의미

&pBuffers[i] = 0x00; 

로 변경해야한다고 생각 i
이므로 &을 추가 할 필요가 없습니다.

하지만 내가 틀릴 수도 있습니다 :-(

0

당신의 질문은 배열의 배열에 대한 것입니다. 이것은 코드에서하는 일이 아니라 하나의 배열을 생성 한 것입니다.

같은 것을보십시오 :

#define BUFFER_LENGTH 50 
#define numberOfBuffers 10 

int** pBuffers; 

pBuffers = (int**) calloc(numberOfBuffers, sizeof(int*)); 

for (int i = 0; i < numberOfBuffers; i++) 
    pBuffers[i] = (int*) calloc(BUFFER_LENGTH, sizeof(int)); 

다른 사람들이 당신이 그렇게 당신이 그 일을 반복 할 필요가 없습니다에 대한은 calloc 0으로 초기화 말했듯이. 사용중인 C 버전에 따라 for 루프 외부에 int i를 정의해야 할 수도 있습니다.

는 샘플이 정수의 배열은 당신이 만드는 어떤 시간 :

1

에서 스타일과 명명 규칙하지만 한 단계에 대한라고 할 수있는 다른 일이 있습니다. 대신 정수 배열 배열을 만들려고합니다. 설정은 비슷하지만 변수를 int**으로 선언하고 각 버퍼를 개별적으로 할당해야합니다.

calloc이 이미 수행 할 예정이므로 배열을 0으로 초기화하는 데 별다른 의미가 없습니다.

int ppBuffer[numberOfBuffers][BUFFER_LENGTH] = { 0 }; 
+0

버퍼의 배열을 생성합니다. 이러한 모든 버퍼는 서로 다른 프로세스간에 공유 메모리로 작동합니다. 각 프로세스는 버퍼에 정수를 읽고 씁니다. 기본적으로 버퍼 배열이 필요하며 처음에는 각 버퍼에 정수 0을 저장합니다. 이 에러가 계속 발생합니다 : 할당은이 라인에있는 캐스트 – user69514

+0

이없는 포인터에서 만듭니다. bufferArr [i] = (int *) calloc (BUFFER_LENGTH, sizeof (int)); – user69514

+0

(int *)를 (int)로 변경했는데 더 이상 오류가 발생하지 않습니다. 그러나 버퍼에서 읽으려고하면 세그멘테이션 오류가 발생합니다. – user69514