0
好的,所以問題基本上就像標題一樣。找不到一個問題,它的所有位,所以我想我會問。分配結構數組中的指針
說我要結構的數組形如以下
typedef struct s_woo{
char** n;
char* x;
} t_woo;
所以我相信我應該做
t_woo* woos = malloc(num_woos * sizeof(*woos));
看起來非常簡單(而且應該從我喊我的習慣震懾人心鑄造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'放入't_woo'中,並且具有爲單個't_woo'(以及另一個在後來銷燬)完成所有構建的功能。然後,在你分配內存給它們之後,儘可能快地遍歷你的't_woo'列表,在每個列表中調用構造函數。 –
'並且每輪循環都會改變.. ..您是否在每次循環分配之前釋放內存?也許你的外部循環運行很多次,它會產生內存錯誤。 –