170 похожих чатов

Это Си void swap(int* a, int* b) { if

(*a > 0 && *b > 0)
*a = (*b + *a) - (*b = *a);
}

int mai()
{
int* a = (int*) malloc(sizeof(int));
int* b = (int*) malloc(sizeof(int));
*a = 5;
*b = 10;

void (*pf)(); //without parameters (look here)
pf = swap;
pf(a, b);
printf("a: %i, b: %i\n", *a, *b); //works fine

free(a);
free(b);

return 0;
}

Для чего указывать параметры функции при создании указателя на функцию, просто чтобы интелисенс показывал их при вызовах ?
Ведь я могу вызвать без параметров - pf(), с большим количеством параметром - pf(2, 2, 2, 2) и т.д, и это скомпайлиться, просто получу segmentation fault (ubuntu).
И вообще как параметры на вызов влияют ? Ведь вызов функции (на сколько мне известно) это просто переход по памяти и исполнения кода что там лежит.
Еще интересно как именно я получаю segmentation fault (ubuntu) когда не передаю аргументы при таком вызове, что такое умное говорит "на стеке таких переменых нету" (не знаю как сформулировать правильно этот вопрос), т.е почему просто не взять рандомные числа со стека/регистров и не использовать их как аргументы, это же делает какой-то код, но какой ?

6 ответов

6 просмотров

Выглядит как UB

> т.е почему просто не взять рандомные числа со стека/регистров и не использовать их как аргументы Потому что это дыра в безопасности

Функция без параметров это foo(void), foo() - это неопределенное число параметров

UB же....

По параметры функции: нет, не можешь!

Это вообще компилироваться не должно > Просто сегфолт Ага, ничего необычного, работает отменно > рандомные числа с регистров Нахера тебе рандомные числа с регистров? Это не работает, потому что существует конвенция вызова. Интелисенс это вторичное

Похожие вопросы

Обсуждают сегодня

Доброй ночи. Вопрос знатокам. Имеется некая таблица, результат которой выведен в DBGrid на форме. И есть форма, с помощью которой можно как добавить запись, так и отредактиров...
Евгений
27
а всё почему? потому что ассемблер в отличии от яву порождает множество пагубных привычек, среди которых например можно отметить использование глобальных переменных для всего ...
Mixail Frolov
35
анрей С какой целью зашёл?
КТ315
42
Кто нибудь из участников чата пишет на ассемблере под GNU/Linux?
Spiker01
24
я часов 15 назад начал пытаться написать хоть что-то напоминающее ос и у меня есть проблема, которую я пытаюсь решить последние часов 5: есть крч 2 исходника с минимальным код...
Al1to
17
Всем привет ребят! Мб кто-то сталкивался? adminСomponents .get("searchСomponents", use: searchComponents) .openAPI( summary: ...
Admin Adminov
2
Кстати вопрос. Проанализировав свои проекты я понял, что в наиболее ценных из них Асм использовался для организации real-time процессов (внутри DOS). А какие есть способы сего...
Alexander Morozov
18
Я не очень много работал с потоками, тут возник вопрос - если будет одновременный доступ к памяти из двух разных потоков, это само по себе приведет к ошибке?
The Bird of Hermes
25
Насколько моя реализация Exercise 1 плохая? data MessageType = Info | Warning | Error Int deriving (Show, Eq) type TimeStamp = Int data LogMessage = LogMessage ...
= ?
6
а вот интересный вопрос появляется: допустим у нас есть приложение с системой модулей. Будет ли считаться система модуль+прога ассемблерной программой если: а) Прога на Си, м...
Mixail Frolov
29
Карта сайта