2
กำลังใช้ malloc สำหรับพฤติกรรมที่ไม่ได้กำหนดไว้จนถึง C ++ 20
ฉันได้รับแจ้งว่ารหัสต่อไปนี้มีพฤติกรรมที่ไม่ได้กำหนดไว้จนถึง C ++ 20: int *p = (int*)malloc(sizeof(int)); *p = 10; เป็นเช่นนั้นจริงหรือ? อาร์กิวเมนต์คืออายุการใช้งานของintอ็อบเจ็กต์ไม่ได้เริ่มต้นก่อนกำหนดค่าให้กับมัน ( P0593R6 ) ในการแก้ไขปัญหาnewควรใช้ตำแหน่ง: int *p = (int*)malloc(sizeof(int)); new (p) int; *p = 10; เราต้องเรียกตัวสร้างเริ่มต้นที่ไม่สำคัญเพื่อเริ่มอายุการใช้งานของวัตถุหรือไม่? ในเวลาเดียวกันรหัสไม่มีพฤติกรรมที่ไม่ได้กำหนดใน C บริสุทธิ์ แต่จะเป็นอย่างไรถ้าฉันจัดสรรintรหัสใน C และใช้ในรหัส C ++? // C source code: int *alloc_int(void) { int *p = (int*)malloc(sizeof(int)); *p = 10; …