我在C中編寫了一個semestral工作,但我無法在這裏認識到這個問題。當我在調試中運行代碼時,它給我一個分段錯誤。我不確定有什麼問題。以前我把記憶分配給poleNazvu,但不是分段錯誤,而是讓我「試圖釋放非堆對象」,所以這不是一種方法。請告訴我如何處理分段錯誤。它發生在我strcpy(poleNazvu ...)的行中,我在代碼中標記了它。 ALOKACE_POLI = 200; ALOKACE_MALA = 20;它做的是,它需要一個「約翰500」和levaStrana獲得「約翰」,而pravaStrana獲得「500」所以我試圖將levaStrana複製到poleNazvu和pravaStrana到poleKreditu。在這段代碼的末尾,snip是分段錯誤。strcpy出現分割錯誤
void menuHighlights(void) //menu se zebricky uzivatelu
{
char vyber3, * poleNazvu[ALOKACE_POLI][ALOKACE_MALA],line[ALOKACE_LINE];
char * prohodJmeno, * menic, * separator, * levaStrana, * pravaStrana;
int poleKreditu[ALOKACE_POLI], count=0, countMax=0, prohodCislo, d;
FILE *NACTENI;
//int alokace1=0, alokace2=0; //vytvoreni promenne pro soubor
fflush(stdin); //vyprazdneni bufferu
system("cls"); // vycisteni obrazovky
printf("\nZebricek nejlepsich hracu:\n"); //tisk hlavicky
fflush(stdin); //buffer
NACTENI = fopen(SOUBOR_HRACU , "r"); //ulozeni otevreneho souboru do promenne
if(NACTENI == NULL) { //jestlize v promenne nic neni
perror("Soubor nenalezen."); //vypis error
Sleep(HODNOTA_BIG_SLEEP); //nech uzivatel aby si to precetl
exit(1); //a pak ukonci seanci
}
while (fgets(line, sizeof line, NACTENI) != NULL) { //pokud radek nacteny ze souboru nebude prazdny
fflush(stdin); //buffer
menic=line; //anti-decay opatreni promenne line
separator = " ";
levaStrana = strtok(menic, separator);
pravaStrana = strtok(NULL, "");
//if ((poleNazvu[count][ALOKACE_MALA-1]=(char *)malloc(ALOKACE_PROHAZOVANI*sizeof(char)))==NULL) {
// printf("Nedostatek pameti. Ukoncuji.");
// exit(1);
//}
//alokace1=1;
strcpy(poleNazvu[count][ALOKACE_MALA-1],levaStrana); //ITS HERE
poleKreditu[count]=atoi(pravaStrana);
if (countMax<count) {
countMax=count;
}
count++;
}
不做'fflush(標準輸入); ',這是UB。 –
沒有'free()'.... –
你爲'poleNazvu [count] [ALOKACE_MALA-1]'分配了內存嗎? – Bathsheba