Я пытаюсь изучить основы программирования на C, C ++, поэтому я начал с "C".У меня большой опыт программирования на Java и VB.Но «С» - это то, что я хочу выучить.Поэтому у меня возникла проблема: я пытаюсь понять функции "malloc" и "free".
Я использую Borland C ++ 4.5 и Visual C ++ 6.0 в Windows 98. - (Просто среда тестирования, хочуизучите очень простое и раннее программирование Windows).
См. этот код:
struct String
{
char *value;
int length;
};
char *initString(const char *value)
{
char *str = (char*)malloc( strlen(value)+1 );
strcpy(str, value);
return str;
}
struct String *InitString(const char *text)
{
struct String *str = (struct String*)malloc( sizeof(struct String) );
str->value = initString(text);
str->length = strlen( str->value );
return str;
}
void freeString(struct String *str)
{
free(str->value);
free(str);
str = NULL;
}
int main(int argv, char *argc[])
{
struct String *theString = InitString("Testring string struct");
printf("String: %s\n", theString->value);
printf("String Length: %d\n", theString->length);
freeString(theString);
printf("\nData: %s", theString->value);
return 0;
}
Когда эта программа запускается, результат верный.", функция освобождает память и устанавливает для структуры значение NULL внутри функции" freeString () ", что должно освободить" theString "внутри" main () ", когда я передаю указатель на" theString ", но когдафункция возвращает: «theString» не является «NULL».
В Borland 4.5 я все еще могу вызвать «printf» с «theString-> value», и она печатает строку.В Visual C ++ происходит сбой программы при вызове «printf» - НО «theString» все еще не «NULL».Когда я отслеживаю программу в режиме отладки, "struct" освобождается внутри функции "freeString ()", а для структуры устанавливается значение NULL, но когда функция возвращает, "theString" не равно NULL, а "value" равновсе еще можно использовать на Borland, но не на Visual C ++.
Итак, я пытаюсь понять, что здесь происходит?Есть ли какая-то де-ссылка, которую следует сделать?
Заранее спасибо!