2013-10-04 4 views
2

У меня есть этот код:Почему printf вызывает ошибку сегментации?

char* env; 

if (getenv("MP") == NULL) 
{ 
    env = "/usr"; 
} 
else 
{ 
    env = getenv("MP"); 
} 

printf("($MP is %s)\n", env); 
printf("The program seg faults without printing me :("); 

Программа появляется на SEG отказ после первой печати, если переменная окружения $ MP не установлен. Если он установлен, нет никакой ошибки seg, и все работает нормально.

+1

Этот код прекрасно работает для меня, ты логика немного странно Тхо;) – goji

+0

Использование 'valgrind' или' gdb' найти точное положение в коде, где он возвращает ошибку сегментации. – us2012

+0

Я ошибся, второй отпечаток не печатает, потому что я забыл закончить линию, кричит, gdb показал мне это. – Outback

ответ

2

я могу получить свою программу, если я сегментация не включаю stdlib.h

Т.е. попробуйте следующее:

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    char* env; 

    if (getenv("MP") == NULL) 
    { 
     env = "/usr"; 
    } 
    else 
    { 
     env = getenv("MP"); 
    } 

    printf("($MP is %s)\n", env); 
    printf("The program seg faults without printing me :("); 

    return 0; 
} 
+0

А, я включил stdlib.h при тестировании по умолчанию. Это очень интересно. – goji

+0

Подтверждено :) Сбой только при изменении переменной окружения MP. – goji

+0

Мне пришлось изучить этот вопрос после моего первого идиотского ответа :-) –

0

Почему бы вам не так сделать?

const char *env = getenv("MP"); 
if (!env) 
    env = "/usr"; 
+0

Это в основном то, что у меня было до того, как я попробовал всевозможные другие чудовищные вещи, чтобы увидеть, будет ли работать: P – Outback

Смежные вопросы