Я написал код в C, в котором я определил функцию, которая принимает void * в качестве аргумента и также возвращает void *. Я получаю несколько предупреждений и Segmentation Fault
во время исполнения. Пожалуйста, дайте мне знать, если я делаю что-то глупое. Я несколько новичок во всем этом.
Код:
#include <stdio.h>
#include <stdlib.h>
void *fun1(void *a) {
int temp = *((int*)a); // Typecasting the received void* valud dereferencing it.
temp++;
return ((void*)temp); // Returing the value after typecasting.
}
int main()
{
printf("Hello World\n");
int a =5;
int *p = &a;
int b = *p;
printf("%d %d",a,b);
int x = *((int*)fun1((void*)&b)); /*
Here I am trying to send "b" to "fun1" function after doing a typecast.
Once a value is receievd from "fun1" , I am typecasting it to int*.
Then I am deferencing the whole thing to get the value in int format.
*/
printf("\n%d",x);
return 0;
}
O / P:
main.c:8:13: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
Hello World
Segmentation fault (core dumped)
Из отладчика GDB я обнаружил, что происходит ошибка сегментации в строке 20 после того, как значение возвращается из fun1()
. Я подозреваю, что способ отправки значения b на fun1()
неправильный.
Кроме того, почему промежуточный оператор printf
в строке 18 printf("%d %d",a,b);
не выполняется?