So funktioniert JustAnswer:
  • Fragen Sie einen Experten
    Tausende Experten in über 200 Kategorien.
  • Erhalten Sie eine professionelle Antwort
    Per E-Mail oder sofortiger Benachrichtigung, während Sie auf unserer Website warten. Stellen Sie ggf. weitere Anschlussfragen.
  • 100%ige Zufriedenheit garantiert
    Bewerten Sie die erhaltene Antwort.
Stellen Sie Ihre Frage an Mohammad Saddam.
Mohammad Saddam
Mohammad Saddam,
Kategorie: Computer
Zufriedene Kunden: 1209
Erfahrung:  Sr. Desktop support engineer at HCL
112900375
Geben Sie Ihre Frage in der Kategorie Computer hier ein
Mohammad Saddam ist jetzt online.

Hallo, ich programmiere C in Visual Studio, bekomme vom

Kundenfrage

Hallo, ich programmiere C in Visual Studio, bekomme vom Debugger jetzt ständig "Ein Heap wurde beschädigt". Kann den Fehler nicht ausfindig machen, wahrscheinlich schreibe ich in einen unzulässigen Speicherbereich - Dynamische Speicherallozierung per malloc() und free(). Komme nicht weiter...
Fachassistent(in): Welches Betriebssystem verwendet Ihr Gerät?
Fragesteller(in): Windows 10
Fachassistent(in): Vielen Dank. Gibt es noch weitere Details, die Sie dem Experten mitteilen wollen?
Fragesteller(in): zunächst nicht.
Gepostet: vor 9 Monaten.
Kategorie: Computer
Kunde: hat geantwortet vor 9 Monaten.
Nachricht von JustAnswer auf Kundenwunsch) Sehr geehrter Experte, Ihr Kunde möchte ein Angebot von Ihnen über den zusätzlichen Service: Telefon-Anruf.
Kunde: hat geantwortet vor 9 Monaten.
Bitte teilen Sie ihm mit, ob Sie noch weitere Informationen benötigen oder senden Sie ihm ein Angebot, damit Ihr Kunde weiter betreut werden kann.
Experte:  kai-mod hat geantwortet vor 9 Monaten.
Sehr geehrte Kundin, sehr geehrter Kunde,aufgrund einer Überprüfung haben wir festgestellt, dass Ihre o.a. Frage bisher leider noch nicht beantwortet wurde.Wir haben Ihre Frage ohne zusätzliche Kosten unter einer erhöhten Priorität eingestuft, und unsere Experten erneut informiert, sich mit Ihrem Problem zu beschäftigen.Sollten Sie weiterhin keine Antwort erhalten, bitten wir Sie, sich mit uns***@******.*** oder telefonisch von Montags-Freitag von 10:00-18:00 unterDeutschland: 0800(###) ###-####sterreich: 0800 802136Schweiz: 0800 820064 in Verbindung zu setzen.Vielen Dank ***** ***** Geduld.Ihr JustAnswer Moderatoren-Team
Experte:  Mohammad Saddam hat geantwortet vor 9 Monaten.

Hallo, willkommen bei JustAnswer!
Mein Name ist Saddam und ich freue mich sehr, Sie heute bei Ihren Problemen zu unterstützen.

Ich bin ein Tech-Experte bei Justanswer mit 5.5 Jahre Erfahrung. Es tut mir leid zu hören, dass Sie Probleme mit C Program  haben. Bitte geben Sie mir einen Moment, um die Details Ihrer Frage zu überprüfen

Experte:  Mohammad Saddam hat geantwortet vor 9 Monaten.

Heap ist in diesem Fall beschädigt, was bedeutet, dass Sie aus den gültigen zugewiesenen Bereichen herausgeschrieben haben.

Experte:  Mohammad Saddam hat geantwortet vor 9 Monaten.

zum Beispiel Bitte überprüfen Sie dieses Programm hier ist auch der gleiche Fehler aufgetreten

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

main()
{
int *Matrix_01, *Matrix_02;
int a, b, i, n,gültig=1;
srand(time(0));
do
{
printf("Anzahl der Zeilen einfügen: ");
scanf("%d", &a);
printf("Anzahl der Spalten einfügen: ");
scanf("%d", &b);
if (a >= 0 && b >= 0)
gültig = 0;
sonst
{
printf("Ungültige Eingabe!");
system("pause>null & cls");
}
} while (gültig == 1);

Matrix_01 = (int *)malloc(a * b * sizeof(int));
Matrix_02 = (int *)malloc(a * b * sizeof(int));
for (i = 0; i < a; i++)
for (n = 0; n < b; n++)
{
Matrix_01[a*i + n] = rand() % 50;
Matrix_02[a*i + n] = rand() % 50;
}
printf("\nErste Matrix:\n");
for (i = 0; i < a; i++)
{
printf("\n");
for (n = 0; n < b; n++)
{
printf("%4d", Matrix_01[a*i + n]);
}
}
printf("\n\nSecond Matrix:\n");
for (i = 0; i < a; i++)
{
printf("\n");
for (n = 0; n < b; n++)
{
printf("%4d", Matrix_02[a*i + n]);
}
}
printf("\n\nAddition:\n");
for (i = 0; i < a; i++)
{
printf("\n");
for (n = 0; n < b; n++)
{
printf("%4d", Matrix_01[a*i + n]+Matrix_02[a*i + n]);
}
}
printf("\n\nSubtraktion:\n");
for (i = 0; i < a; i++)
{
printf("\n");
for (n = 0; n < b; n++)
{
printf("%4d", Matrix_01[a*i + n] - Matrix_02[a*i + n]);
}
}
printf("\n");
system("pause>null");
}

Überprüfen Sie die Minimal- und Maximalwerte Ihres Index:
- i reicht von 0 bis a-1
- n reicht von 0 bis b-1
Also reicht a*i + n von 0 bis a*(a+1) + b. Es stimmt also nicht mit den Dimensionen der Matrix überein. Wenn a größer als b ist, wird der Speicher beschädigt.
Sie müssen dies durch b*i + n ersetzen (was im Bereich von 0 bis b*(a-1) + b => a*b
Sie wollen auch vermeiden, dass a oder b beim Lesen der Eingabe Null ist. Eigentlich ist es besser zu prüfen, ob scanf erfolgreich einen Wert scannen konnte, indem man den Rückgabewert prüft und dann prüft, ob die Werte größer als Null sind (aber nicht gleich). Oder man verwendet 2D-Matrizen (oder berechnet einmal Zeiger auf Zeilen, um diese Berechnungen zu vermeiden)

Experte:  Mohammad Saddam hat geantwortet vor 9 Monaten.

Bei Rückfragen stehe ich Ihnen über den Button "dem Experten antworten" zur Verfügung und würde mich über eine positive Bewertung (3-5 Sterne) Ihrerseits sehr freuen.

Mit freundlichen Grüssen,

Tech-Experte -
Mohammed Saddam