Это мой первый вопрос, и я пытался найти решение, но, даже если я его нашел, я его не узнал.
Так что, как следует из названия, проблема в том, чтов этом вызванном исключении «Исключение, выданное в 0x0F26372D (ucrtbased.dll) в lab10.exe: 0xC0000005: Место чтения нарушения доступа 0xCCCCCCC4.
Если для этого исключения есть обработчик, программа может быть безопасно продолжена»., что происходит, когда я вхожу в строку -> free (word).
Это случалось со мной несколько раз, когда я изучал malloc, но я упустил это из виду - подумал, что есть какая-то другая проблема.Но теперь я вижу, что я делаю что-то не так.
Смысл программы - написание структуры "слово".Мне нужно ввести предложение и «разрезать» его на слова, а затем каждое слово положить в структуру вместе с размером букв в слове и порядковым номером слова.
#include <stdio.h>
#include <string.h>
struct word {
char text_word[50];
unsigned sizee; //number of letters of the word
unsigned number; //ordinal number of the word
};
void cutting_sentence(struct word *p, char *sen) { //sen is sentence
int size_sen, i, j;
size_sen = strlen(sen) + 1; //size of sentence
p = (struct word*)malloc(size_sen * sizeof(struct word));
if (p == NULL) {
printf("\nNot enaugh memory!");
return 0;
}
strcpy(p[0].text_word, strtok(sen, " ,.!?"));
p[0].sizee = strlen(p[0].text_word);
p[0].number = 1;
printf("word:%s \t size:%u \t ordinal number of the word:%u\n",
p[0].text_word, p[0].sizee, p[0].number);
for (i = p[0].sizee - 1, j = 1;i < size_sen;++i) {
if (*(sen + i) == ' ' || *(sen + i) == '.' || *(sen + i) == ','
|| *(sen + i) == '?' || *(sen + i) == '!') {
strcpy(p[j].text_word, strtok(NULL, " ,.!?"));
p[j].sizee = strlen(p[j].text_word);
p[j].number = j + 1;
printf("word:%s \t size:%u \t ordinal number of the
word:%u\n", p[j].text_word, p[j].sizee, p[j].number);
j++;
}
}
}
int main() {
char sentence[1024];
struct word *word;
printf("Sentence: ");
gets(sentence);
cutting_sentence(&word, sentence);
free(word); //here is exception triggered
return 0;
}