वहाँ this answer जो मानक malloc
की तरह वापसी मान के रूप में एक void*
गुजर के बजाय उत्पादन तर्क के रूप में उपयोग करता void**
cudaMalloc((void**)&device_array, num_bytes)
का उपयोग करते हैं, के बारे में एक और सवाल पर है।कास्टिंग (शून्य **) और device_array जैसे कास्टिंग में क्या गलत है?
यह NVIDIA के एपीआई की आलोचना की और कहा गया है: में (शून्य **) & device_array रूप
कास्टिंग, अवैध सी और अपरिभाषित व्यवहार में परिणाम है।
और कई बार (8 अभी तक) को उखाड़ फेंक दिया गया है, इसलिए मुझे लगता है कि इसमें कुछ सच्चाई है।
मुझे समझ नहीं आता क्या वहाँ कास्टिंग साथ कुछ गड़बड़ है।
- क्या अमान्य सी यहाँ है?
- किस मामले में यह अपरिभाषित व्यवहार का कारण बन जाएगा?
मुझे पता है कि यह चेतावनी के बिना संकलित करता है और मेरे लिए इच्छित व्यवहार के साथ चलता है। लेकिन मैं सी मानक विनिर्देश स्तर तक सी के साथ जानकार नहीं हूँ।
वही समस्या जैसे कि आपने 'int *' 'float *' पर डाला है। 'शून्य **' 'void *' वैसे ही विशेष नहीं है। – immibis
फिर, क्या यह लिखना गलत है? 'int val = 0x4229B26C; \t printf ("0x% एक्स द्वारा स्मृति में प्रदर्शित फ्लोट का% .03f \ n", वैल, * ((फ्लोट *) &val)); ' – bct
का दशमलव मान है [यह SO पोस्ट] (http://stackoverflow.com/questions/15818906/does-this-pointer-casting-break-strict-aliasing-rule) – LPs