Пытаюсь запустить функцию, помещенную в динамическую память, но всегда получаю Segmentation fault.
Первый вариант: загружаю код из bin-файла:
int main(int argc, char *argv[])
{
FILE *bytecode;
if((bytecode = fopen("jit_me.bin", "r")) == NULL)
{ fprintf(stderr,"Error opening file\n"); exit(1); }
char *p;
void (*f)() = p = malloc(50);
int c,i=0;
while((c = getc(bytecode)) != EOF) {*(p+i)=(char) c; i++;}
fclose(bytecode);
printf("Here we go...\n");
(*(f))();
}
Второй вариант: копирую готовую функцию в память и запускаю:
void temp()
{
printf("Hello");
}
int main(int argc, char *argv[])
{
char *p,*old;
old = (void (*)()) temp;
void (*f)() = p = malloc(20);
int i=0;
for(i=0;i<10;i++) {*(p+i)=(char) *(old+i); i++;}
printf("Here we go...\n");
(*(f))();
}
Всегда печатает фразу "Here we go..." (прямо перед запуском функции) и вылетает. Что делать, чтобы он заработал?
Похожие темы
- Форум Просьба проверить учебную программу на языке Си на наличие ошибок - 2 (2014)
- Форум Си /*ошибка сегментирования */ (2009)
- Форум Не компилиься элементарная рога... (2003)
- Форум Не компилится элементарная прога... (2003)
- Форум Да помогите вы мне с этим wav-player'oм!!! (2003)
- Форум [нубский вопрос]C и указатели... (2009)
- Форум Как на Си реализовать ввод в файл с новой строки? (2017)
- Форум Простейший вопрос - свои первые строчки на C. Где argv ? (2004)
- Форум [C] почему падает код ? (2008)
- Форум C, про типы (2005)