Initializing pointer arrays in c -
नीचे दिए गए कोड में, मैंने एल, आर और सरणी को आरम्भ किया:
int * L = (Int *) malloc (आकारफ (int) * n1); Int * R = (int *) malloc (sizeof (int) * n2); के लिए (i = 1; i & lt; = n1; i ++) {एल [i] = ए [पी + i - 1]; } के लिए (जे = 1; जे एंड एलटी; = एन 2; जे ++) {आर [जे] = ए [क्यू + जे]; } Int * array = (int *) malloc (sizeof (int) * n); ... के लिए (सी = 0; सी & lt; n; c ++) {scanf ("% d", और [सर] [सी]); } लेकिन एक सीगफॉल्ट मिला क्या आप मुझे बता सकते हैं कि इस आरंभीकरण में क्या गलत है?
#include & lt; stdio.h & gt; # शामिल करें & lt; limits.h & gt; # शामिल करें & lt; stdlib.h & gt; शून्य मर्ज (int * A, int p, int q, int r) {int n = r - p + 1; / * सरणी में तत्वों की संख्या A * / int n1 = q - p + 1; Int n2 = r - q; Printf ("n2 =% d \ n", n2); Int i, j, k; Int * L = (int *) malloc (आकारफ (int) * n1); Int * R = (int *) malloc (sizeof (int) * n2); के लिए (i = 1; i & lt; = n1; i ++) {एल [i] = ए [पी + i - 1]; } के लिए (जे = 1; जे एंड एलटी; = एन 2; जे ++) {आर [जे] = ए [क्यू + जे]; } एल [एन 1 + 1] = INT_MAX; [एन 2 + 1] = INT_MAX; मैं = 1; J = 1; Printf ("p =% d \ n", p); Printf ("r =% d \ n", r); के लिए (k = p; k & lt; = r; k ++) {printf ("k =% d \ n", k); अगर (एल [आई] और एलटी; = आर [जे]) {ए [के] = एल [आई]; आई + = 1; } और {ए [के] = आर [जे]; जे + = 1; }} नि: शुल्क (एल); नि: शुल्क (आर); } शून्य merge_sort (int * A, int p, int r) {int i; / * के लिए (i = 0; i & lt; = r-p; i ++) {printf ("% d \ n", ए [i]); } * / पूर्णांक q; यदि (पी एंड एलटी; आर) {/ * printf ("मर्ज_सोर्ट पी =% d \ n", पी); Printf ("मर्ज_सॉर्ट आर =% d \ n", r); * / q = (p + r) / 2; / * प्रिंटफ़ ("q =% f \ n", q); * / merge_sort (ए, पी, क्यू); मर्ज_सॉर्ट (ए, क्यू + 1, आर); / * प्रिंटफ़ ("किया गया \ n"); * / मर्ज (ए, पी, क्यू, आर); }} Int main () {int x, c; Int n; Int * array = (int *) malloc (sizeof (int) * n); Printf ("तत्वों की संख्या दर्ज करें \ n"); scanf ( "% d", & amp; n); Printf ("% d तत्वों को दर्ज करें \ n", n); (सी = 0; सी & lt; n; c ++) के लिए {scanf ("% d", और [सर] [सी]); } Merge_sort (सरणी, 0, एन -1); (सी = 0; सी & lt; n; c ++) के लिए {printf ("% d \ n", सरणी [सी]); } नि: शुल्क (सरणी); वापसी 0; } <
आप malloc के लिए n1 < / Code> और n2 int s में एल और आर , क्रमशः। इससे यह सूचकांक एल [0] के माध्यम से एल [एन 1 - 1] और आर [0] के माध्यम से R [ N2 - 1] , समावेशी है, लेकिन आपके लूप i लिखित में एल [n1] और आर [n2] लिखते हैं N1 और j & lt; = n2 । प्रत्येक लूप के लिए 0 को शुरू करें और प्रत्येक अंत की स्थिति से = s को हटा दें। (यह भी एक अच्छा विचार है कि आप अपना अन्य उसी त्रुटि के लिए कोड, यानी, याद रखें कि 0 पहली इंडेक्स है और यह सरणी की लंबाई के लिए गिना जाता है।)
Comments
Post a Comment