Поведение: неправильная работа с памятью или утечка памяти C ++ - PullRequest
0 голосов
/ 21 апреля 2019

Я новичок в C ++ и сталкиваюсь с такой ошибкой :

Поведение: неправильная работа с памятью или утечка памяти в: MyInteger :: isPrime (int) (MyInteger.cpp: 72): main (main.cpp: 23)
at: MyInteger :: isPrime (int) (MyInteger.cpp: 59)

Что это означаетзначить и как я могу это исправить?Я пытался использовать valgrind, но новичку кажется немного сложным.

 //MyInteger.cpp
        bool MyInteger::isPrime(int z){
            int i,flag1;
            if(z == 1){
                flag1 = 1;
            }
            for(i = 2; i < z; i++){
                if(z % i == 0)
                {
                    flag1 = 1; 
                    break;
                }else flag1 = 0;
            }

            if(flag1 == 1){
                return false;
            }else return true;
            }  

    //MyInteger.hpp  
    class MyInteger{
       public:
       static bool isPrime(int);
    };  

    //main.cpp  

    int main{
      const string words[3][2] = {"not even", "even",
                                    "not odd", "odd",
                                    "not prime", "prime"};  
        ..............................
        ..............................
        ...............................
        cout << "Integer "  << b << " is: ";
        cout << words[0][MyInteger::isEven(b)] << ", ";
        cout << words[1][MyInteger::isOdd(b)] << ", ";
        cout << words[2][MyInteger::isPrime(b)] << ".\n";
    }

1 Ответ

0 голосов
/ 22 апреля 2019

Кажется, что ваша функция isPrime является частной функцией, которую нельзя вызвать в main () Этот код работает для меня

// Example program
#include <iostream>
#include <string>
using namespace std;

class MyInteger
{
   public: static bool isPrime(int);
};
bool MyInteger::isPrime(int z)
{
    int i,flag1;
    if(z == 1){
        flag1 = 1;
    }
    for(i = 2; i < z; i++){
        if(z % i == 0)
        {
            flag1 = 1; 
            break;
        }else flag1 = 0;
    }

    if(flag1 == 1){
        return false;
    }else return true;
} 
int main()
{
    const string words[3][2] = {"not even", "even",
                                    "not odd", "odd",
                                    "not prime", "prime"};  
    int b=2;
    cout << "Integer "  << b << " is: ";

    cout << words[2][MyInteger::isPrime(b)] << ".\n";
}

Выход

Integer 2 is: not prime.
...