* Hinweis: Dies ist keine doppelte Frage, da die Antwort, auf die Sie verweisen, meine Frage nicht beantwortet. Ich weiß, was malloc() und calloc() tun sollten, aber wundere dich, warum es keinen Unterschied gibt, wenn du es mit Virtual Machine verwendest.Der Unterschied zwischen malloc() und calloc() in C (von Virtual Machine Linux) kann nicht gefunden werden
Ich weiß, was der Unterschied sein sollte - malloc() nur Sie den Speicher zuweisen, während Calloc() es mit Nullen initialisieren.
Die Sache ist, in meinem Code wird es nicht angezeigt, und Malloc() scheint keinen Unterschied zu geben, während von meiner Virtual Machine Ubuntu ausgeführt wird. Ich habe es ein paar Mal ausgeführt und malloc verhält sich genau wie Calloc.
Hinweis - Ich habe es gerade mit meiner tatsächlichen Festplatte überprüft, und es scheint zu funktionieren, da bekomme ich andere Ergebnisse.
Der Code:
#include <stdio.h>
#include <stdlib.h>
int main(){
int i,n;
float *ptr1, *ptr2;
printf("enter a total number of float items: ");
scanf("%d", &n);
ptr1 = malloc(n*sizeof(float));
ptr2 = calloc(n, sizeof(float));
printf("malloc | calloc\n");
printf("----------------------\n");
for(i=0;i<n;i++)
printf("%-10f %10f\n", *(ptr1+i), *(ptr2+i));
printf("\n");
free(ptr1);
free(ptr2);
return 0;
}
Was meinen Sie wirkt genau wie calloc? Du bekommst Nullen? Es ist erlaubt, nichts sagt, dass du * nicht bekommen würdest. Aber nichts sagt, dass du auch Nullen bekommen wirst. –
OT: Verweis auf den Aufruf des Codes an 'printf()': Der von 'malloc() 'zurückgegebene Speicher wurde nicht initialisiert. Das Drucken des Inhalts von nicht initialisiertem Speicher ruft undefiniertes Verhalten hervor. – alk
Einfacher Grund: Die Seiten werden aus Sicherheitsgründen vom Betriebssystem gelöscht. Du solltest dich nie darauf verlassen. – Olaf