Случай 1: Я написал следующее гр программы и когда я проверил на утечки памяти я утечки памяти на этой линии str = (char*)malloc(10);
даже когда я написал заявление, чтобы освободить ту памятьУтечка памяти при инициализации строки
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *str;
str = (char*)malloc(10);
str = "string";
printf("length : %ld\n",strlen(str));
free(str);
return 0;
}
Case 2:
Когда я заменил str="string"
strcpy()
, утечки не возникает, почему это так?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *str;
str = (char*)malloc(10);
strcpy(str,"string");
printf("length : %ld\n",strlen(str));
free(str);
return 0;
}
Случай 1 показывает неопределенное поведение: вы не называете 'free()' тем же указателем, который вы получили из 'malloc()'. Если в случае 2 вы это делаете. –
1) 'str =" string ";' Он был перезаписан указателем на строковый литерал. – BLUEPIXY
кейс1. 'str =" string "' - неверно, потому что это не операция с копией; должен быть 'strcpy (str," string ")' как в случае2 – nikniknik2016