У меня есть код в нескольких разных функциях, который выглядит примерно так:
void someFunction (int *data) {
data = (int *) malloc (sizeof (data));
}
void useData (int *data) {
printf ("%p", data);
}
int main () {
int *data = NULL;
someFunction (data);
useData (data);
return 0;
}
someFunction ()
и useData ()
определяются в отдельных модулях (файлы *.c).
Проблема заключается в том, что, хотя malloc работает нормально, а выделенная память может использоваться в someFunction
, одна и та же память недоступна после возвращения функции.
Пример запуска программы можно увидеть здесь, с выходом, показывающим различные адреса памяти.
Может кто-нибудь объяснить мне, что я делаю неправильно здесь, и как я могу заставить этот код работать?
EDIT: Мне кажется, что мне нужно использовать двойные указатели, чтобы сделать это - как я буду делать то же самое, когда мне действительно нужно использовать двойные указатели? Так, например, данные
int **data = NULL; //used for 2D array
Должен ли я использовать тройные указатели в вызовах функций?