Ошибка при выполнении программы c++

161
22 ноября 2021, 01:00
#include <iostream>
using namespace std;
char *writeInt(int v)
{
    char lol[] = {};
    lol[0] = (((v >> 24) & 0xFF));
    lol[1] = (((v >> 16) & 0xFF));
    lol[2] = (((v >>  8) & 0xFF));
    lol[3] = (((v      ) & 0xFF));
}
int readInt(char i[])
{
    return (
            ((i[0] << 24) & 0xFF) |
            ((i[1] << 16) & 0xFF) |
            ((i[2] <<  8) & 0xFF) |
             (i[3]        & 0xFF));
}
int main()
{
    writeInt(10);
    std::cout << readInt(writeInt(10)) << std::endl;
    return 0;
}

Выдает Segmentation fault

Answer 1
char lol[] = {};

Ну, т.е. пустое место. Ни одного элемента в массиве, но все равно пишем? уже достаточно для проблем... Кстати, тот же VC++ этот код не скомпилирует - нулевых массивов не бывает. Но даже если исправить - что вы собираетесь вернуть? Ведь return во writeInt нет - оно же опять не компилируется!

Вывод: или вы пользуетесь калечным компилятором, или вводите нас в заблуждение :)

Вот так - еще куда ни шло:

unsigned char *writeInt(int v)
{
    static unsigned char lol[4];
    lol[0] = (((v >> 24) & 0xFF));
    lol[1] = (((v >> 16) & 0xFF));
    lol[2] = (((v >>  8) & 0xFF));
    lol[3] = (((v      ) & 0xFF));
    return lol;
}
int readInt(unsigned char i[])
{
    return (
            ((i[0] << 24) ) |
            ((i[1] << 16) ) |
            ((i[2] <<  8) ) |
             (i[3]        ));
}
int main()
{
    writeInt(10);
    std::cout << readInt(writeInt(10)) << std::endl;
    return 0;
}
Answer 2

Язык С++ не допускает таких объявлений в принципе

char lol[] = {};

Программа некорректна. Любые попытки выполнения такой "программы" приводят к неопределенному поведению, проявлением которого запросто может быть и Segmentation fault.

READ ALSO
C++, оптимизация сложного возвращаемого значения

C++, оптимизация сложного возвращаемого значения

Меня интересует вопрос, касающийся оптимизации сложного возвращаемого значения

157
Не судите строго

Не судите строго

Подскажите,как сделать так чтобы огромной количество if-ов работало вместе и приводило к ответу? Моя программа ничего не выводит, а должна

84
Наследование функций C++

Наследование функций C++

Ситуация такаяЕсть класс A в котором есть функция protected virtual f

76
Проблема при кодировании данных

Проблема при кодировании данных

Таким образом кодирую int, но при декоде большие числа не корректно отображаютсяПример в данном случае возвращает 10, но возьму число 10000 мне...

76