Olá pessoal...estou escrevendo um código onde se viu a necessidade de ter uma matriz dinâmica. Escolhi implementar utilizando ponteiro para ponteiro e fiz o seguinte código : ... char **files; . . . (files) = (char**)malloc( 50 * sizeof(char)); for( j = 0 ; j < 50 i ; j++ ){ *(files+j) = (char*)malloc(50*sizeof(char)); strcpy( *( files + j ) , "eric" ); } printf("primeiro elemento é : %s " , *( files + 0 ) ) ; Ok, mas o resultado que deveria ser eric não é exibido..é exibido um lixo de memória... Explicação : //aloco espaço para 50 ponteiros. (files) = (char**)malloc( 50 * sizeof(char)); //cada ponteiro eu aloco mais 50 posições *(files+j) = (char*)malloc(50*sizeof(char)); //em cada ponteiro eu guardo uma string. strcpy( *( files + j ) , "eric" ); Bem...antes que sugiram que seja a quantidade de memória alocada, eu testo cada alocação efetuada...não postei pra não complicar o código... um caso interessante é o seguinte caso eu venha a fazer o seguinte : load = (char**)malloc( 50 * sizeof(char)); *load = (char*)malloc(50*sizeof(char)); *(load+1) = (char*)malloc(50*sizeof(char)); *(load+2) = (char*)malloc(50*sizeof(char)); *(load+3) = (char*)malloc(50*sizeof(char)); *(load+4) = (char*)malloc(50*sizeof(char)); *(load+5) = (char*)malloc(50*sizeof(char)); *(load+6) = (char*)malloc(50*sizeof(char)); *(load+7) = (char*)malloc(50*sizeof(char)); *(load+8) = (char*)malloc(50*sizeof(char)); *(load+9) = (char*)malloc(50*sizeof(char)); *(load+10) = (char*)malloc(50*sizeof(char)); *(load+11) = (char*)malloc(50*sizeof(char)); *(load+12) = (char*)malloc(50*sizeof(char)); //continua... strcpy( *( files + 9 ) , "eric" ); printf("nono elemento é : %s " , *( files + 8 ) ); //exibe com sucesso... Alguém tem alguma dica a dar ? Algo me intriga com o strcpy();