У меня есть следующие программы:Возвращение malloced указатель в C
#include <stdio.h>
#include <stdlib.h>
char* getStr(int length) {
char* chars = malloc(length + 1);
int i;
for(i = 0; i < length; i++)
chars[i] = 'X';
chars[i] = '\0';
// no call to free()
return chars;
}
int main(int argc, char** argv) {
char* str;
str = getStr(10);
printf("%s\n", str);
free(str);
return EXIT_SUCCESS;
}
Он печатает 10 X
«с, как я ожидал. Будет ли это вести себя на любой платформе с любым компилятором? Является ли память еще malloced после getStr()
возвращается?
(я не хочу, чтобы передать указатель в качестве аргумента: D)
Да, память по-прежнему выделяется после возвращения функции. – Cyclonecode
Он хорошо определен на всех платформах и системах. Если вы выделяете память с помощью 'malloc', она остается выделенной до тех пор, пока вы явно не назовете' free'. (Большинство основных операционных систем также освобождают выделенную память при выходе процесса.) –
Не забудьте проверить указатель на 'NULL' перед разыменованием указателя, это может быть просто простой пример, но, пожалуйста, не забудьте его, вы будете не пожалеете. –