2017-11-18 4 views
-1

액세스 위반 쓰기 위치 : 난 그냥 몇 달 C를 사용하고 같은 오류가 무엇을 의미하는지 말 그대로 아무 생각이C 난 그냥이 코드를 컴파일하고, 나에게이 오류 보여

Exception thrown at 0x0F2FC4DA (ucrtbased.dll) in Sample7.exe: 0xC0000005: Access violation reading location 0x97979436.

을 . 나는 또한 다른 웹 사이트에서 도움을 구하려고 노력했지만 아무 것도 찾지 못했습니다.

#include<stdio.h> 
#include<conio.h> 
#include<string.h> 
#include<stdlib.h> 
int main() 
{ 
    int i = 0, n, length = 0; 
    char *abc; 
    printf("\n Enter size of array: "); 
    scanf_s("%d", &n); 
    abc = new char[n]; 
    printf("\n Enter symbols: "); 
    scanf_s("%s", abc); 
    length = strlen(abc); 
    for (i = 0; i <= n; i++) 
    { 
     printf("\n Your array: ", abc); 
     while (length = 10) 
     { 
      if (abc[i] >= 'A' && abc[i] <= 'Z') 
      { 
       abc[i] = ' '; 

      } 
      printf("\n Your array after deleting A-Z symbols",abc); 
     } 

    } 
    delete[]abc; 
    _getch(); 
    return 0; 
+5

및 – rsp

+0

이의 의미 무엇입니까 https://stackoverflow.com/questions/2069367/how-to-debug-using-gdb – Yunnosch

+1

@ Вячеслав Сорока C.에 키워드를 삭제 -이 함께 시도하지 매직 넘버 10? –

답변

0

할당 된 공간 밖의 메모리에 액세스하고 있기 때문에이 오류가 발생합니다. 내 생각 엔 당신이 그것의 경계 밖으로 문자 배열 인덱스를 액세스하는 것입니다. 당신이 일렬로 코드를 디버깅해야 할 일이 어디에서 볼 수 있습니다.

코드의 처음 모습에서 다음과 같은 실수를 발견했습니다.

for (i = 0; i <= n; i++) 나는 당신이 의미 생각 : 또한 while (length = 10)for (i = 0; i < n; i++)

의 모든 주범의 while (length == 10)

0

먼저 당신이 scan_f를 통해 문자열을 읽고있는 동안 당신의 필요의 크기를 제공하기 때문에 scanf_s("%s", abc);입니다해야한다 scanf_s("%s", abc, n);와 같은 문자열 또한 코드에서 수정할 필요가 거의 없습니다. 영사에게서 배열의 크기를 입력하십시오. 예를 들어 Enter size of array: 10이고 여기서 10을 입력했습니다. 이제 어레이의 크기는 10이므로 루프는 0-9 총 10 위치에서 계속되어야하므로 for 루프는 for (i = 0; i <= n; i++)이어야합니다. 두 번째 while 루프 while (length = 10) 이것은 항상 true 일 것이고 따라서 무한 루프가됩니다. 그러므로 그것은 while (length = 10)이어야하지만 당신은 심지어 while 루프를 전혀하지 않습니다. 세 번째 printf 문은 printf("\n Your array: %s", abc);이어야하며 두 번째 문단은 printf("\n Your array after deleting A-Z symbols %s ",abc);이어야하지만이 문은 delete 문 뒤에 프로그램 끝 부분에 있어야합니다.

아래 프로그램을 수정했습니다. 새로운

#include "stdafx.h" 
#include "stdafx.h" 
#include<stdio.h> 
#include<conio.h> 
#include<string.h> 
#include<stdlib.h> 
int main() 
{ 
    int i = 0, n, length = 0; 
    char *abc; 
    printf("\n Enter size of array: "); 
    scanf_s("%d", &n); 
    abc = new char[n]; 
    printf("\n Enter symbols: "); 
    scanf_s("%s", abc, n);//your scanf_s function was wrongly define.This one is correct. 
    printf("\n Your array1: %s", abc); 
    for (i = 0; i < n; i++) 
    { 
    printf("\n Your array: %s", abc); 
    //while (length == 10) You don't need this while loop at all 
    //{ 
     if (abc[i] >= 'A' && abc[i] <= 'Z') 
     { 
      abc[i] = ' '; 

     } 

     //} 
     printf("\n Your array after deleting A-Z symbols :%s", abc); 
} 
delete[]abc; 
_getch(); 
return 0; 
}