2013-04-18 1 views
-1

Это не мой точный код, но он походит на это по существу. Я пытаюсь создать переменную стека в main()C: «Недействительный свободный(): адрес 0x7feffee08 находится в стеке 1-го уровня»

int ** x;

, что я хочу перейти к функции foo (int ** x, arg1, arg2, ...). В каком-то состоянии я должен динамически выделять пространство для x в foo()

x = (int **) malloc (sizeof (int *) * num_elems);

Я также не выделяя новое пространство для каждого элемента Int *, но назначая к нему & у, где у ИНТ был создан в Foo().

Я получил эту ошибку, когда попытался освободить x в main(). Я не понимаю, что это значит, но я подозреваю, что это может быть потому, что я использовал & y?

EDIT: Также уместно: у меня были значения мусора, когда я попытался получить доступ к элементам с двойным разыменованием x.

ответ

1

Вы неправильно объявлены в основной функции и не определены правильно в функции foo(). Вы должны объявить как

В основной функции

int *x ; 
foo(&x); 

В Foo (Int ** х, ....)

*x = malloc(sizeof(int) * num_elems); 
+0

http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc –

0

Рассмотрим это,

void foo() 
{ 
    int y; 
    int *x = NULL; 
    x = &y; 
} 

В этот случай, y хранится в стеке. Когда foo вернется, y будет недоступен (зависит от реализации). Если вам абсолютно необходимо это сделать, вместо этого следует указать mallocy. Если вы это сделаете, то вместо этого в куче будет храниться y.

Смежные вопросы