2015-04-21 1 views
0

Я новичок в этом, так что несите меня! ;)Освобождение выделенного пространства функцией вызываемого в сборке (att)

Я пытаюсь вернуть строку на ассемблере. У меня есть строка в стеке, которая правильно завершена.

затем I movl %esp до %eax и вернуть функцию. Моя мысль была вызвать из функции переменного тока и использовать эту функцию на ассемблере, как это:

extern char* getthestring (void); 

int main() 
{ 
char *m; 
m=getthestring(); 
printf ("The string is %s", *m); 
free (m); 
return 0; 
} 

я получаю ошибки ошибки сегментации, и я не могу отладить ее, как GDB дает мне это:

Program terminated with signal SIGSEGV, Segmentation fault. 
#0 0x00000001 in ??() 

Может ли кто-нибудь помочь мне здесь?

+1

Вы не должны возвращать указатель на локальную переменную. Кроме того, вы можете использовать 'free' для освобождения памяти, выделенной из кучи, используя' malloc' и друзей. – Jester

+0

Да, я подозреваю, что это была проблема. Мне нужно решить задание и захотелось создать для него отдельную функцию. Поскольку я считаю, что выделение памяти кучи потребует другой функции, не написанной мной, что запрещено назначением, я думаю, мне придется написать все это на одной функции. – francisaugusto

ответ

0

Как заметил @jester, я пытаюсь вернуть локальные переменные, что является не-go.