2012-05-19 4 views
2

C를 특히 두 번 포인터로 이해하려고하는데이 문제가 발생했습니다. 나는 하나의 포인터 (for 루프를 제거하는 등)이 개념은 작동하지만, 내가 찾은 코멘트에서 seg 오류를 얻는 것 같다.C - 함수 내에서 이중 포인터에 값 지정

누군가 내가 왜이 오류가 발생하는지 설명 할 수 있습니까? 내가 전에 myArgs의 주소를 전달하기 전에 그것에 대한 약간의 메모리를 할당해야하지만 나는 단지 얕은 복사를하고있어, 메모리를 할당해야합니까 직감이나요?

void readArgs(int argc, char *argv[], char ***myArgs) { 
    int i; 
    for(i = 0; i < argc; i++) { 
     /* crashes here @ i = 0 */ 
     *myArgs[i] = argv[i]; 
    } 
} 

int main(int argc, char *argv[]) { 
    char **myArgs; 
    int i; 

    readArgs(argc, argv, &myArgs); 
    for(i = 0; i < argc; i++) 
     printf("arg[%d]: %s\n", i, myArgs[i]); 
} 
+0

[this] (http://pw1.netcom.com/~tjensen/ptr/pointers.htm) 자습서를 읽는 것이 좋습니다. – PALEN

답변

6

myArgs이 (가) 초기화되지 않았기 때문에 segfault가 표시됩니다. 실제로는 malloc으로 공간을 할당해야합니다. 얕은 사본을 만들지는 않습니다. 당신은 포인터의 배열을 복사하고 있습니다.

즉, 트리플 포인터는 C의 코드 냄새입니다. ** 이상의 코드는 필요하지 않습니다.

+0

코드 - 냄새 부분에서 "in C"를 안전하게 제거 할 수 있다고 생각합니다. 또는 어떤 언어가 트리플 포인터 인 페어 게임입니까? –

+0

@DanielFischer : 이름을 지을 수는 없지만 포트란이나 파스칼에서는 프로그래밍 한 적이 없습니다. –

+2

"3 성급 프로그래머"라고 불리는 것은 칭찬이 아닙니다. –

관련 문제