OK, 문제는 기본적으로 제목과 같습니다. 그것의 모든 비트를 가지고있는 질문을 찾을 수 없었기 때문에 나는 물었다. 구조체 배열 내부에 포인터 할당
내가 내가t_woo* woos = malloc(num_woos * sizeof(*woos));
은 간단한데 (나의 습관에 대한 소리지르 사람들을 제지해야 할 것으로 판단 구조체의 배열 그래서 다음
typedef struct s_woo{
char** n;
char* x;
} t_woo;
모양 싶은 말 malloc 주조).
그런 다음 각 구조체의 내용을 초기화하려고합니다.
그래서 직관적으로 내가 할 :
for(i = 0; i < num_woos; i++){
num_ns = randomint1/randomint2; //let's say num_ns is big, like 250-ish, average, and changes every round of the loop
woos[i].n = malloc(num_ns * sizeof(char*));
woos[i].x = malloc(num_ns * sizeof(char));
for(j = 0; j < num_ns; j++){
woos[i].n[j] = malloc(16 * sizeof(char)); // I just want 16 characters per char*
}
}
이것은 내 코드에서 무엇을의로 요약 버전입니다. 나는 가능한 무엇이든 - 내가 쓴 것을 잘못 이해할 수 있는지 알고 싶다. 특히 메모리/힙 문제, 포인터 실수 등과 같은 위의 일반적인 문제는 특별히 찾고 있지 않습니다.
"가상 메모리가 가득 참"으로 두십시오. 내 코드 오류는 malloc에서 래퍼 함수를 사용하여 검사하므로 오류가 아닙니다.
여기에서 잘 보입니다. '16'대신에 정의/상수를 사용하기 위해 코딩 오류를 피할 수 있습니다. 이 배열에 문자열을 저장할 것인지 여부는 모르겠지만 그렇다면 null 종결자를 잊지 마십시오. –
강력한 디자인을 원한다면 좀 더 * 캡슐화 *를 사용할 수 있습니다. 즉, 't_woo'를 자체 포함 된 개체로 바꿀 수 있습니다. 이것은'num_ns' insde't_woo'를 넣는 것과 하나의't_woo' (그리고 나중에 파괴를하는 또 다른 것)에 대한 모든 구성을하는 함수를 갖는 것입니다. 그런 다음 각각에 대해't_woo'의 목록을 반복하여, 가능한 빨리 메모리를 할당 한 후 생성하십시오. –
'와 루프의 모든 라운드를 변경합니다 .' .. 루프의 각 라운드에서 할당하기 전에 메모리를 할당 해제 하시겠습니까? 어쩌면 외부 루프가 여러 번 실행되어 메모리 오류가 발생할 수 있습니다. –