[포인터] 포인터 + malloc 질문 드립니다.

poplinux의 이미지

다음과 같은 형태로 작성하려고 합니다.

int main()
{
  int *list;
 
}
 
void makeBuf(int **list)
{
  *list = (int *) malloc(128);
}
 
제가 포인터에 너무 약해서...
 
위와 같이 main() 함수에서 포인터 변수를 하나 만들고 makeBuf() 함수에서 malloc() 으로 버퍼를 만들어서 연결하려고 합니다. 
 
위와 같이 하면 안될듯 한데... 샘플 코드 좀 부탁 드릴께요. 
서지훈의 이미지

잘 될텐데요.

그러나 보통은 이런식은 넘겨받은 값을 변경할 경우에 많이 쓸테고,
그저 새로운 pointer를 받고자 한다면....

void *makeBuf( size_t size )
{
  void *buf;
 
  buf = (void *) malloc( size );
 
  return buf;
}

이런 방법이 좀 더 나을듯 하네요.

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <beer.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

오호라의 이미지

#define MAX_HEAP_SIZE (10000)
void *makeBuf( size_t size )
{
  void *buf = NULL;
 
  assert ( size < MAX_HEAP_SIZE ); 
 
  buf = (void *) malloc( size );
 
  assert ( buf != NULL );
 
  return buf;
}

어떤 분은 요즘같은 64bit세상에 malloc이 실패할때도 있냐?

if( buf != NULL ) 같은건 구닥다리다.

하지만... disk가 부족해서 virtual memory 잡다가 malloc에서 메모리 할당이 실패할때도 있습니다.

Hello World.

poplinux의 이미지

감사합니다.

========================
조직 : E.L.D(Embedded Linux Developer/Designer)
블로그 : poplinux@tistory.com
카페 : cafe.naver.com/poplinux

임베디드 리눅스 관련 프리렌서 지향