我想我現在已經修好了一切。我犯了增加environ變量的錯誤,而不是像數組那樣處理它並遍歷它。以下是我現在擁有的,應該很好去。使用malloc時出現分割錯誤
extern char **environ;
int main(int argc, char *argv[]) {
// determine number of environment variables
int n = 0;
char *c = NULL;
while ((c = environ[n++]) != NULL) {
printf("%s\n", c);
}
printf("%s\n%d\n\n", c, n);
// allocate array to store character pointers to environment array
char **new_c;
printf("This prints\n");
if ((new_c = malloc(n * sizeof(*c))) == NULL) {
printf("Error\n");
exit(EXIT_FAILURE);
}
printf("This prints now too\n");
free(c);
// sort array of character pointers
// parse each environment variable and output
exit(0);
}
要開始,我已經通過幾打的malloc閱讀這裏&段故障問題,並沒有似乎是我的一樣。這就是說,如果這是一個重複的問題,你會指點我的解決方案嗎?
大家好,我有一個使用malloc的問題。我編譯並運行了一次程序,malloc工作。然後我開始填充更多的代碼來解決問題,並且自第一次運行以來,我收到了分段錯誤。下面是我在它的代碼的最後工作狀態(仍然給人一種賽格故障錯誤雖然):
extern char **environ;
int main(int argc, char *argv[]) {
// determine number of environment variables
int n = 0;
char *c = *environ;
while ((c = *environ++) != NULL) {
n++;
printf("%s\n", c);
}
printf("%s\n%d\n\n", c, n);
// allocate array to store character pointers to environment array
printf("This prints\n");
if ((c = malloc((size_t) n)) == NULL) {
perror("Unable to allocate memory\n");
}
printf("This does not print\n");
free(c);
// sort array of character pointers
// parse each environment variable and output
exit(0);
}
程序應該因爲那時將用於進行排序,分析一個字符數組分配內存,並打印名稱值或值名稱對,具體取決於FORMAT值的設置。第一個循環工作並遍歷environ變量並打印出每個名稱 - 值對。我包括的兩個printf語句陳述了我在終端中看到的內容。有沒有人有任何想法我做錯了?
另外,我還使用下面的malloc線嘗試:
char *new_c = malloc((size_t) n);
char *new_c = malloc(n);
char *new_c = malloc(1);
char *new_c = malloc(sizeof(n));
int *ptr = malloc((size_t) n);
大概有幾個人我試過,但我還是百思不得其解。有幾行代碼,我不知道如何在早期如何搞定任何東西。另外,笑聲這裏是我所得到的,當我在終端使用免費(顯示我的可用內存):
total used free shared buff/cache available
Mem: 3036836 1404340 902852 104712 729644 1491248
Swap: 0 0 0
我也打過電話以外的malloc if語句這樣:
c = malloc((size_t) n);
if (c == NULL) {
perror("Unable to allocate memory\n");
}
好,打電話,這是我接下來要處理的問題。現在我沒有收到分段錯誤,但是此語句未打印出來: printf(「This does not print \ n」); – ZSButcher
@ZSButcher嗯,它應該,我不明白爲什麼沒有。你能顯示完整的修改代碼嗎? – Ctx
我錯誤地將if語句的條件更改爲!=。現在一切似乎都在起作用。感謝您的好眼睛! – ZSButcher