2017-11-18 6 views
-1

ich nur diesen Code kompiliert, und es zeigte mir diesen Fehler:C Zugriffsverletzung schriftlich Lage

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

ich buchstäblich keine Ahnung, was dieser Fehler bedeutet, wie ich habe für ein paar Monate mit C gerade . Ich habe auch versucht, auf anderen Websites nach Hilfe zu suchen, aber ich habe keine gefunden.

#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

Keine neuen und löschen Stichwort in C. – rsp

+0

https://stackoverflow.com/questions/2069367/how-to-debug-using-gdb – Yunnosch

+1

@ Вячеслав Сорока Was ist die Bedeutung von die magische Zahl 10? –

Antwort

0

Sie erhalten diesen Fehler, weil Sie auf Speicher außerhalb des zugewiesenen Speicherplatzes zugreifen. Meine Vermutung ist, dass Sie auf das char-Array außerhalb seiner Grenzen zugreifen. Sie müssen Ihren Code zeilenweise debuggen, um zu sehen, wo dies geschieht.

Auf den ersten Blick Ihres Codes fand ich die folgenden Fehler.

for (i = 0; i <= n; i++) Ich glaube, Sie gemeint: for (i = 0; i < n; i++)

auch while (length = 10)while (length == 10)

0

allererst Ihre Hauptschuldige sein sollte, ist scanf_s("%s", abc); weil während sich eine Schnur durch scan_f Ihre Notwendigkeit, die Größe zu schaffen, Lesen die Zeichenfolge wie scanf_s("%s", abc, n);. Auch Sie brauchen wenig Korrektur in Ihrem Code. Sie geben die Größe eines Arrays aus Consul ein. Zum Beispiel Enter size of array: 10 und Sie haben hier 10 eingegeben. Jetzt ist die Größe des Arrays 10, daher sollte die Schleife von 0-9 insgesamt 10 fortfahren, daher sollte Ihre for-Schleife for (i = 0; i <= n; i++) sein. Zweitens wird Ihre while-Schleife while (length = 10) dies immer wahr und daher wird es eine Endlosschleife. Daher sollte es while (length = 10) sein, aber Sie haben nicht einmal diese while-Schleife überhaupt. 3. Ihre printf-Anweisung 1. sollte printf("\n Your array: %s", abc); sein und zweitens sollte printf("\n Your array after deleting A-Z symbols %s ",abc); sein, aber diese Anweisung sollte am Ende des Programms nach delete-Anweisung sein.

Ich habe Ihr Programm unten korrigiert. Versuchen Sie es mit dieser: -

#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; 
}