Не понимаю, почему я получаю ошибку сегментации - PullRequest
1 голос
/ 22 ноября 2011

Когда я передаю массив в функцию в динамической библиотеке с подписью:

void itoa(int n, char s[]);

и вызов его из моей основной функции:

int main(int argc, char *argv[])
{
    if (argc > 1) {
        char *arg = argv[1];
        printf("%s\n", arg);
    }   

    char str[15]={'0', '0', '0', '0', '0',
                  '0', '0', '0', '0', '0', 
                  '0', '0', '0', '0', '\0'}; 
    itoa(INT_MIN, str);
    printf("%s\n", str);
    return 1;
}

Проходя по коду с помощью gdb, я вижу, что программа вылетает в следующей строке:

s[i++] = n % 10 + '0';

Обратите внимание, что начальное значение i объявлено 0 в верхней части функции.

Почему происходит сбой?


UPDATE

Обратите внимание, что он работает локально.

#include <stdio.h>
#include <limits.h>
#include "c_lib.h"

void itoa_local(int n, char s[])
{
    int min_int = 0;
    int i, sign = 0;;

    if (INT_MIN == n) {
        min_int = 10;
        n++;
    }

    if ((sign = n) < 0) n = -n;
    do {
        s[i++] = n % 10 + '0';
    } while ((n /= 10) > 0);

    if (sign < 0) s[i++] = '-';
    s[i] = '\0';
    if (min_int == 10) s[0]++;
    reverse(s);
}


int main(int argc, char *argv[])
{
    if (argc > 1) {
        char *arg = argv[1];
        printf("%s\n", arg);
    }   

    char str[15]={'0', '0', '0', '0', '0',
                  '0', '0', '0', '0', '0', 
                  '0', '0', '0', '0', '\0'}; 
    itoa_local(INT_MIN, str);
    printf("%s\n", str);
    return 1;
}

1 Ответ

0 голосов
/ 23 ноября 2011

Ответ в первоначальном посте. Я ответил на свой вопрос, поэтому мне не пришлось его удалять. Архивные причины в основном.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...