Read access violation [требует правки]

241
16 мая 2017, 05:01
int StrLength(char *str);
int HexToDouble(char *str);
int main()
{
    char str[] = "134";
    HexToDouble(str);
}
int HexToDouble(char *str)
{
    int size = StrLength(str) * 4;
    int *dblarr = new int[size];
    for (int i = 4; i < size; (i + 4))
    {
        for (int j = 4; j > 0; j--)
        {
            dblarr[j] = (int)(*str) % 2;
        }
        str++;
    }
    for (int i = 0; i < size; i++)
    {
        cout << dblarr[i];
    }
    return 0;
}
    int StrLength(char *str)
    {
        int count = 0;
        while (*str)
        {
            str++;
            count++;
        }
        return count - 1;
    }
Answer 1

Если закрыть глаза на "особенности кода", то похоже Ваше проблема закралась здесь

for (int i = 4; i < size; (i + 4))
{
    for (int j = 4; j > 0; j--)
    {
        dblarr[j] = (int)(*str) % 2;
    }
    str++;
}

здесь бесконечный цикл по i, (так как условие выполняется всегда, а i не увеличивается). Внутри цикла увеличивается позиция str и в конце концов оно будет показывать за пределами массива и будет показывать на память "не процесса". Конструкция dblarr[j] = (int)(*str) % 2; - вообще чудесна:)

Как исправить? а кто его знает - логика всей программы мне мало понятна.

READ ALSO
Доступ к закрытому полю класса извне

Доступ к закрытому полю класса извне

Здравствуйте, нашел на неком ресурсе подобный код(немного его модифицировал под себя):

365
Преобразовать код Pascal в C++ [требует правки]

Преобразовать код Pascal в C++ [требует правки]

Помогите преобразовать код Pascal в C++

354
Потоки, WaitForMultipleObject

Потоки, WaitForMultipleObject

Здравствуйте, использование WaitForMultipleObject(

277
Можно ли переместить консоль вывода с++ кода во внутреннее поле vscode?

Можно ли переместить консоль вывода с++ кода во внутреннее поле vscode?

По умолчанию при запуске с++ кода открывается внешняя консольЯ же хочу видеть вывод моей программы в качестве одной из вкладок в нижнем поле...

449