2017-11-12 1 views
-1

고정 된 크기의 float 배열로 구성된 배열을 어떻게 할당합니까? 나는이 시도 :고정 크기 배열의 동적 배열

float **sub_uvs = malloc(sizeof(float [2]) * size * size); 
/* Seg. fault */ 
sub_uvs[0][0] = 0.3; 
sub_uvs[0][1] = 0.4; 
+1

무엇'MEM_mallocN' 왜 당신이 그것을 사용해야합니까되어 사용할 수 있습니까? –

+0

구글은'MEM_mallocN'은 블렌더에서 온 것으로 크기와 태그 문자열을 취합니다. – Potatoswatter

답변

2

가변 크기의 다차원 배열은 여전히 ​​까다 롭습니다. 몇 가지 옵션 :

  1. 배열에 대한 포인터의 배열을 사용하십시오. 포인터 배열에 malloc 하나를 사용하고 malloc을 반복하면 각 행 배열을 만들 수 있습니다. 그러나 이것은 완전히 다른 데이터 구조입니다.

  2. 메모리 관리 및 다차원 인덱싱 방법을 제공하는 클래스를 찾습니다. 아마도 블렌더에 하나가 있습니까?

  3. Eigen 또는 이와 유사한 완전한 수학 라이브러리를 사용하십시오.

+0

그래, 이런 식으로 쓸 수 있을지 모르지만 'float ** sub_uvs = malloc (sizeof (2 float) * size * size);'라고 쓰고 대신 구조체를 사용합니다. –

+0

@MacelaruTiberiu 문제는 '**'는 배열에 대한 포인터의 배열을 나타내지 만 이것을 하나의 다차원 배열로 사용하려고합니다. – Potatoswatter

2

당신은 아마도 MEM_allocN에 다른 전화를 사용하여, 두 번째 배열에 대한 또 다른, 별도의 할당을 수행해야합니다. 플랫폼이 제공하는 할당 해제 기능을 사용하여이 메모리를 별도로 확보해야합니다.

메모리 표현은 완전히 다르므로 구문 적으로 더 편리 할지라도 어느 곳에서나이 작업을하기가 어려울 수 있습니다.

1

하거나 다음 :

float **a; 
a = (float **)malloc(sizeof(float *) * size_row); 

for(int i=0;i<size_row;i++) 
{ 
    a[i] = (float *)malloc(sizeof(float) * size_col); 
} 
a[0][0] = 0.4; 

printf("%f",a[0][0]);