Могу ли я использовать бесплатно () формально в VS2013? -- c поле с участием visual-studio-2013 пол Связанный проблема

Can I use free() formally in VS2013?


-1
vote

проблема

русский
 <код> #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #define TSIZE 45 struct film{     char title[TSIZE];     int rating;     struct film *next; };  int main(void) {     struct film *head = NULL;     struct film *prev, *current;     char input[TSIZE];      puts("Enter first movie title:");     while (gets(input) != NULL && input[0] != '')     {         current = (struct film*)malloc(sizeof(struct film));         if (head == NULL)             head = current;         else             prev->next = current;         current->next = NULL;         strcpy(current->title, input);         puts("Enter your rating (0 - 10):");         scanf("%d", &current->rating);         while (getchar() != ' ')             continue;         puts("Enter next movie title(empty line to stop):");         prev = current;      }      if (head == NULL)         printf("No data entered.");     else         printf("Here is the movie list: ");     current = head;     while (current != NULL)     {         printf("Movie: %s Rating: %d ", current->title, current->rating);         current = current->next;     }     current = head;     while (current != NULL)     {         free(current);         printf("hehe. ");         current = current->next;     }     printf("Bye! ");      return 0; }       

Почему этот код не может быть использован формально в VS 2013? Это только из-за использования <код> free() функции, что код выше не может работать? Возможно <код> free() не может работать формально в VS2013 ???

Извините за размещение всего кода, но система сказала, что я не могу представить этот вопрос из-за отсутствия деталей ....

Английский оригинал
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #define TSIZE 45 struct film{     char title[TSIZE];     int rating;     struct film *next; };  int main(void) {     struct film *head = NULL;     struct film *prev, *current;     char input[TSIZE];      puts("Enter first movie title:");     while (gets(input) != NULL && input[0] != '')     {         current = (struct film*)malloc(sizeof(struct film));         if (head == NULL)             head = current;         else             prev->next = current;         current->next = NULL;         strcpy(current->title, input);         puts("Enter your rating (0 - 10):");         scanf("%d", &current->rating);         while (getchar() != ' ')             continue;         puts("Enter next movie title(empty line to stop):");         prev = current;      }      if (head == NULL)         printf("No data entered.");     else         printf("Here is the movie list: ");     current = head;     while (current != NULL)     {         printf("Movie: %s Rating: %d ", current->title, current->rating);         current = current->next;     }     current = head;     while (current != NULL)     {         free(current);         printf("hehe. ");         current = current->next;     }     printf("Bye! ");      return 0; }     

Why can't this code be used formally in VS 2013? Is it just because of the use of the free() function that the code above can't work? Perhaps free() can't work formally in VS2013???

Sorry for posting the whole code, but system said that I can't submit this question due to lack of details....

</div
     
   
   

Список ответов

1
 
vote

Вы обращаетесь к указателю <код> current после <код> kubectl logs <pod-name> -c isiot-proxy -f0 ING, который представляет собой in undefined поведение . Изменить

 <код> kubectl logs <pod-name> -c isiot-proxy -f1  

к

 <код> kubectl logs <pod-name> -c isiot-proxy -f2  

Обратите внимание, что вы не должны использовать kubectl logs <pod-name> -c isiot-proxy -f3 вообще, так как он был удален из последних стандартных C11 C11 и заверенно плохо для его проблем переполнения буфера. Используйте вместо этого fgets () .

Также не выделяйте результат Mailloc Functions . >

 

You are accessing the pointer current after freeing it, which is undefined behaviour. Change

while (current != NULL) {     free(current);     printf("hehe. ");     current = current->next; } 

to

while (current != NULL) {     struct film *tmp = current;     printf("hehe. ");     current = current->next;     free(tmp); } 

Note that you shouldn't use gets at all as it has been removed from the recent C standard C11 and notoriously bad for it's buffer overrun problems. Use fgets() instead.

Also, don't cast the result of malloc family functions.

</div
 
 
 
 

Связанный проблема

0  Подсчет и сортировка в C  ( Counting and sorting in c ) 
Я заряжаюсь с обычной программой C, которая подсчитывает ряд входов и соответственно классифицирует их. У меня на самом деле нет ни одного кода, написанного д...

0  Где хранятся переменные указателя и как компилятор доступа к нормальной переменной? [закрыто]  ( Where the pointer variables are stored and how compiler access normal variable ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт. Этот вопрос не соответствует Рекомендациям переполнения ...

0  Не может запустить TCP-сервер на iOS, сотовой  ( Cannot run tcp server on ios cellular ) 
Я пытаюсь запустить TCP-сервер на iOS из сотовой связи. В целях задачи этого вопроса я написал эту очень упрощенную версию сервера и клиента в C, используя So...

0  Как остановить программу хранения более одного символа в переменную CHAR? [Дубликат]  ( How to stop a program from storing more than a single character into a char vari ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

7  Как портировать родной C-код на Android  ( How to port native c code on android ) 
Кто-нибудь может сказать мне, как портировать нативную программу C на платформе Android ..умел ли я включить некоторые библиотеки C или как именно ...? Спас...

0  Реализация ARP Smooth  ( Implementing arp sweep ) 
Я играю с libpcap / jpcap. Реализация Sweeper ARP. Я отправляю запрос на все IP в блоке до вещательного адреса и чтения ответов. Теперь я не могу думать о том...

2  Состояние не удалось для ldrloaddll  ( Status failed for ldrloaddll ) 
Я пытаюсь разрабатывать функцию ldrloaddll и мне не повезло с этим .. Я также проушинул для некоторых примеров, нет никакой много документации или правильного...

4  Преобразовать фильм в Openni * .oni видео  ( Convert movie to openni oni video ) 
the библиотека Kinect Openni использует пользовательский формат видеофайла для хранения видеороликов, которые содержат информацию RGB + D. Эти видео имеют р...

0  Как я могу хранить разные виды операторов в 2D-массиве в C?  ( How can i store different kinds of operators in a 2d array in c ) 
Я хочу сделать функцию y = f (x) в виде строки и выяснить операторы в нем, чтобы хранить их в 2D-массиве, где каждый операторы будут рассматриваться как разде...

1  Проблемы с проверкой программы. Пожалуйста помоги!  ( Issues with program validation please help ) 
// Ребята у меня есть проблемы с моим кодом и разрывая мои волосы, пытаясь решить это. Вопрос в том, что я пытаюсь подтвердить свой код, поэтому он не рассчит...

0  Если безымянный семафор инициализируется в общей памяти, Shm_unlink () уничтожает семафор?  ( If an unnamed semaphore is initialized in shared memory does shm unlink destr ) 
Я использую POSIX SEMAPHORES и совместную память для координации одного производителя и одного потребительского буфера. Я хочу полностью инициализировать эту ...

0  Структура в C- Чтобы добавить атрибут во время выполнения?  ( Structure in c to add a attribute at runtime ) 
Как добавить переменную / атрибут участника на структуру из основного в C? ...

0  Fead вызывает ошибку сегментации  ( Fread causing segmentation fault ) 
Попытка создать файл 1024 байтов случайных данных. Когда я запускаю это, я получаю ошибку неисправности сегментации на линии FREAD. Кто-нибудь видит, что я де...

1  Lnk2001: неразрешенный внешний символ _maincrtstartup  ( Lnk2001 unresolved external symbol maincrtstartup ) 
Я пытаюсь скомпилировать пример Win32 Parrot Ardrone SDK V1.8, используя Visual Studio 2012 Express для Windows Desktop. Я использую Windows 7 64-бит. SDK нап...

0  Напишите программу, которая извлекает содержимое файла RPM в Windows  ( Write a program that extracts the contents of an rpm file on windows ) 
Я хочу написать программу, которая извлечет содержимое RPM-файла и выполняет некоторые проверки проверки. Я буду использовать Qt для интерфейса, чтобы програм...

Связанный проблема

0  Подсчет и сортировка в C 
0  Где хранятся переменные указателя и как компилятор доступа к нормальной переменной? [закрыто] 
0  Не может запустить TCP-сервер на iOS, сотовой 
0  Как остановить программу хранения более одного символа в переменную CHAR? [Дубликат] 
7  Как портировать родной C-код на Android 
0  Реализация ARP Smooth 
2  Состояние не удалось для ldrloaddll 
4  Преобразовать фильм в Openni * .oni видео 
0  Как я могу хранить разные виды операторов в 2D-массиве в C? 
1  Проблемы с проверкой программы. Пожалуйста помоги! 
0  Если безымянный семафор инициализируется в общей памяти, Shm_unlink () уничтожает семафор? 
0  Структура в C- Чтобы добавить атрибут во время выполнения? 
0  Fead вызывает ошибку сегментации 
1  Lnk2001: неразрешенный внешний символ _maincrtstartup 
0  Напишите программу, которая извлекает содержимое файла RPM в Windows