Я понимаю, что malloc()
не должен терпеть неудачу, если он не может выделить объем памяти, на который он был запрошен. Однако, когда вы его используете, вам необходимо освободить эту память, когда она вам больше не нужна, или ваша программа будет запрашивать все больше и больше памяти, и в итоге запрос будет сбой, потому что вы ничего не выпустили.
Кроме того, не все незаконные операции с памятью приводит к ошибке, например (код отредактирован 2013-03-08 основан на наблюдении Kludas, что предыдущая версия не будет компилировать):
#include <stdio.h>
#include <string.h>
int main(void)
{
char myString[4];
strcpy(myString, "abcdefghijklmnopqrstuvwxyz"); /* This overflows the buffer */
/* but MIGHT NOT cause an */
/* immediate crash! */
printf("myString = [%s]\n", myString);
return 0;
}
Это может -or-may-not-not-error, но это, конечно, незаконно, потому что я пишу 26 символов в массив, который должен содержать только 4 элемента (три символа плюс завершающий NULL).
Можем ли мы хранить память xyz тогда, для чего она предназначена? –
'xyz' не хранит память. Это указатель. Это указывает на память. –
@UnderDog попробуйте использовать код, заменяющий 'char * xyz = malloc (sizeof (char));' с 'char * xyz;'. – 2013-03-08 00:24:08