Я изучаю основы выделения памяти в C (C++).Код выделения динамической памяти
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
void main(){
char *str;
char *input;
int *ilist;
int i, size1, size2;
printf("Number of letters in word: ");
scanf("%d", &size1);
printf("Number of integers: ");
scanf("%d", &size2);
str = (char *)malloc(size1*sizeof(char) + 1);
ilist = (int *)malloc(size2*sizeof(int));
if (str == NULL || ilist == NULL){
printf("Lack of memory");
}
printf("Word: ");
int k = size1;
// the following line is done to prevent memory bugs when the amount of
letters in greater than size1.
scanf("%ks", &str); //I guess something is wrong with this line
/* user inputs a string */
for (i = 0; i < size2; i++) {
printf("Number %d of %d: ", i + 1, size2);
//this scanf is skipped during the execution of the program
scanf("%d", ilist + i);
}
free(str);
free(ilist);
system("pause");
}
Программа просит пользователя написать количество букв в слове и количество цифр в номере. Затем пользователь записывает слово. Затем он пишет целое число один за другим в зависимости от того, какое число было напечатано ранее. Проблема заключается в том, когда пользователь записывает все слово, следующий scanf пропускается. Спасибо. P.S. могут ли быть другие типы ошибок памяти в этом коде?
Рекомендуется проверить возвращаемое значение 'scanf'. – ilent2
Первый урок c! = C++, а в c вы не накладываете 'malloc()' на тип указателя цели, потому что вам это не нужно. –
Я предлагаю установить Valgrind http://valgrind.org/ для проверки утечек памяти. – birdoftheday