我想我现在已经修好了一切。我犯了增加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