ошибка возникает на моменте сдвига элементов. Как ее исправить?
data = (Student*)realloc(data, count * sizeof(Student)); for (int i = count; i > offset; i--) { data[i] = data[i - 1]; }
count
элементов, то последний имеет индекс count - 1
. Этот цикл должен быть таким: for (int i = count - 1; i > offset; i--)
в функции main, почему то выводит мусор
%32[^,]
может записать до 33 байт (32 символа из файла + 0), что не влезет в такое поле: char title[32];
. Если файл в кодировке utf-8, то байтов в полях может быть больше чем символов. Почему-то как я не стараюсь всё записывается только в sportsmens[i].full_name,
fscanf
, а поля в твоём файле разделены пробелами, формат fscanf
должен включать в себя пробелы чтобы избавиться от разделителей. Кроме того, имеет смысл проверить, что setlocale
возвращает не-NULL, иначе он не повлияет на десятичный разделитель (и %f
не сможет прочитать число с плавающей точкой записанное как 12,12). Но не получается
zeroCounter
как я понял нужен для реализации шага "Remove leading "0" from X'", но эта реализация неправильная. К тому же она находится вне цикла while ( X != "0" )
.for (b in bits of X) // msb to lsb
говорит о том, что b должен пробегать двоичные цифры, от старшего разряда к младшему, в формуле R = 2*R + b
фигурирует значение разряда, а не его индекс, как в твоём коде.R, как я понимаю, должна быть очередная десятичная цифра получающегося числа?
Почему возникает ошибка
scanf("%d", *(b+i));
b = (int*) malloc(a * sizeof(int));
) и даже пытается её возращать, но неправильным типом и main это значение не использует. А поэтому в main b как был NULL так и остаётся. По-хорошему надо как-то так:int * input_array(int a){
int *b = (int*) malloc(a * sizeof(int));
for (int i = 0; i < a; ++i) {
printf("array[%d] = ", i);
scanf(" %d", b+i);
}
return b;
}
int main() {
...
printf("Введите длину массива:");
scanf(" %d", &a);
int *b = input_array(a);
min = find_min(b, a);
max = find_max(b,a);
average = average_function(min, max);
...
}
Если я использую printf("asd"), то весь текст в кавычках будет выведен на экран и записан в лог файл. Вот такая команда: './a.out > file.log'.
./a.out > file.log
не выведет ничего на экран, всё будет перенаправлено в файл. но 2) сам printf об этом ничего не знает. Он выводит данные в поток стандартного вывода, куда они перенаправляются потом -- не его дело. 3) оператор >
перенаправляющий вывод -- это инструкция командной оболочке как запускать программу, к самой программе отношения не имеет.Есть ли какая другая команда вывода, которая будет текст выводить только в терминал, без записи в файл?
./a.out
, без каких-либо изменений в коде. гугля, находил предложения с LD_LIBRARY_PATH=... . Но разве флаг -L при компиляции не служит той же самой цели?
-L
говорит о том, где искать любые библиотеки во время линковки приложения. LD_LIBRARY_PATH
говорит о том, где искать динамические библиотеки во время выполнения. Информация из -L
со времени линковки нигде не сохраняется. Можно зашить в слинкованный бинарник пути к библиотекам, но это делается другими опциями (см. опцию линкера -rpath
). Во время выполнения динамические библиотеки могут быть где угодно, не обязательно там, где они были во время линковки.Как создать динамическую библиотеку, которая зависит от другой библиотеки?
readelf -d libwindow.so | grep NEEDED
то там должна быть ссылка на libSDL. Твоя проблема в том, что сама libwindow.so не найдена. return x | y;
, то она не может никогда вызвать send
, а программа-сервер должна просто завершаться после расчёта НОД.recv
, но поскольку ты её не обрабатываешь, то дальше она будет пытаться выводить ответ из буфера в который не было ничего принято.не знаю, как правильно найти НОД в данном случае:
return x | y
нужно просто использовать x | y
в itoa
. Res и всё что с ним связано можно выкинуть, поскольку оно всё равно никак не используется.char *str = malloc(0);
Правильно ли я понимаю, что в str находится начало выделянно памяти на 0 байт
If the size of the space requested is zero, the behavior is implementation-
defined: either a null pointer is returned, or the behavior is as if the size were some
nonzero value, except that the returned pointer shall not be used to access an object.
а дальше идет запись символов в память, которая для нас не предназначалась?
Для процессора x86 с word 32bit. Как будут выполняться fetch?
Хочу ответ в таком формате.
почему процессор обращается 2 раза к невыравненным данным?
с чем могут возникнуть проблемы
Я пытаюсь загрузить 64-битное ядро по адресу 0x1000
AllocatePages
только возвращает адрес выделенной памяти по адресу в последнем параметре. Т.е. куда будут загружены сегменты ELF сказать нельзя и, соответственно, без динамической релокации этот ELF скорее всего работать не будет.AllocatePages
будет то же расстояние, что и между сегментами ELF, в то время как кодогенерация с флагом -fPIE
вполне может считать это расснояние неизменным. Такой ELF нужно загружать в один большой блок памяти, сохраняя расстояние между сегментами.header.e_entry
-- это прыжок в неизвестность. как мне модифицировать мою программу, чтобы она могла определять потоки и корректно отправлять их коллектору?
по умолчанию int является signed
Irrespective of the choice made, char is a separate type from the
other two and is not compatible with either.
signed char
-- это, пожалуй, единственное не вызывающее вопросов применение ключевого слова signed в C-коде написанном человеком. В остальных случаях роль signed -- чисто декоративная. почему программа завершилась? Вмешалась ОС? Но если так, то почему?
Почему я не могу поменять значение самого указателя (ведь указатель - это всего лишь ссылка на адрес памяти, а не на значение).
a = (int *)10;
могу ли я указателю дать ссылку на конкретную ячейку в памяти?
получаю ошибку, ведь вряд ли адрес памяти у указателя хранится в виде 16-ричного целочисленного литерала.
int *a = (int *)0x0061FF18;
Почему так происходит?
Any function with internal linkage can be an inline function. For a function
with external linkage, the following restrictions apply: If a function is declared
with an inline function specifier, then it shall also be defined in the same translation
unit. If all of the file scope declarations for a function in a translation unit include
the inline function specifier without extern, then the definition in that translation
unit is an inline definition. An inline definition does not provide an external
definition for the function, and does not forbid an external definition in another
translation unit. An inline definition provides an alternative to an external
definition, which a translator may use to implement any call to the function
in the same translation unit. It is unspecified whether a call to the function uses
the inline definition or the external definition.
inline void some_inline_func(uint32_t num)
{
. . .
}
extern inline void some_inline_func(uint32_t num)
{
. . .
}
static inline void some_inline_func(uint32_t num)
{
. . .
}
void some_inline_func(uint32_t num)
{
. . .
}