संकलन अलग

मुझे समस्या आती है क्यों काम नहीं करता

!g++ -Wall -Wextra -g -c cm1.cpp -o cm1.o

cm1.cpp: In function ‘int main(int, char**)’:
cm1.cpp:14:5: warning: ‘t’ may be used uninitialized in this function [-Wmaybe-uninitialized]
   cm(t,n);
   ~~^~~~~

परीक्षण करने के लिए सभी भाग संकलन

!g++ cm1.o cm.o -o test

निष्पादित करना

यहाँ जब मैं सिर्फ g++ cm1.cpp -o cm1.o . का उपयोग करता हूँ

!./test 4

4: तर्क जोड़ी


!./test 4 4

सिंटैक्स: ./ परीक्षण (एन ख़राब)


लेकिन जब मैं सही संख्या की कोशिश करता हूं तो मुझे कुछ नहीं देना

!./test 5

कोड का हिस्सा है:

-- 1

%%writefile cm.hpp
#include <iostream>
#include <stdlib.h>
#include <iomanip>

using namespace std;
void cm(int **t,int n);

2

%%writefile cm.cpp
#include "cm.hpp"

void cm(int **t,int n){
  
  int l, c, exl, exc;
  for(int i = 0; i < n; i++) 
    for(int j = 0; j < n; j++) t[i][j] = 0;

  l = 0; c = n/2; t[l][c] = 1; 

  for(int i = 2; i <= n*n; i++) { 
    exl = l; exc = c;
    l--; if(l < 0) l = n-1;
    c++; if(c > n-1) c = 0;
    if(t[l][c] != 0) { l = exl+1; c = exc; }
    t[l][c] = i;
  }
  
  for(int i = 0; i < n; i++) { 
    for(int j = 0; j < n; j++) 
      cout << setw(6) << t[i][j];
    cout << endl;
  }
  unsigned trace = 0;
  for(int i = 0; i < n; i++) trace += t[i][i];   
  cout << "Somme magique = trace: " << trace << endl;
}

भाग ३

int main(int argc, char *argv[]) { 
if(argc != 2) {
  cout << "Syntaxe: " << argv[0] << " <n impair>" << endl; 
  exit(1);  
}   
int n;
n= atoi(argv[1]);
if(n % 2 == 0) {
cout << n << ": argument pair\n"; 
exit(2);    
}  int **t1;

cm(t1,n);

return 0;
}

-2
Omar Douiba 19 फरवरी 2021, 16:26
आपके पोस्ट किए गए कोड में cm(t,n); नहीं है। कृपया एक न्यूनतम, प्रतिलिपि प्रस्तुत करने योग्य उदाहरण पोस्ट करें। t1 in cm(t1,n); को इनिशियलाइज़ नहीं किया गया है और इससे वैसे भी परेशानी होगी।
 – 
MikeCAT
19 फरवरी 2021, 16:27
आपके पिछले प्रश्न के समान टिप्पणी: पॉइंटर्स सरणी नहीं हैं। आपने int** t1 उसे cm पास कर दिया है और फिर अचानक आप दिखावा करते हैं कि t[i][j] = 0; लिखकर एक 2d सरणी है।
 – 
463035818_is_not_a_number
19 फरवरी 2021, 16:28
क्या आपने पहले ही std::vector का उपयोग करने पर विचार किया था? वैक्टर को किसी और चीज की तरह कार्यों से पारित और वापस किया जा सकता है, सरणी नहीं।
 – 
463035818_is_not_a_number
19 फरवरी 2021, 16:29
एक ही समस्या प्राप्त करें
 – 
Omar Douiba
19 फरवरी 2021, 16:30

1 उत्तर

सबसे बढ़िया उत्तर

फ़ंक्शन में पास करने से पहले आपको बफ़र्स आवंटित करके t1 को इनिशियलाइज़ करना होगा।

}  int **t1;

// allocate an array of pointers
t1 = new int*[n];
// allocate arrays for each row
for (int i = 0; i < n; i++) {
  t1[i] = new int[n];
}

cm(t1,n);
1
MikeCAT 19 फरवरी 2021, 16:29