A
A
Alexander2019-01-07 05:43:17
C++ / C#
Alexander, 2019-01-07 05:43:17

C++ How to get details about an error?

CppHello.cpp

// файл реализации класса CppHello.cpp
// подключаем интерфейс класса к файлу его реализации

#include "HHello.h"
#include <string>

using namespace hello;
using namespace std;

CppHello::CppHello() // конструктор класса
{
}

CppHello::~CppHello() // деструктор класса
{
}

void CppHello::setName(char *value) {
    name = value;
}

char *CppHello::message() {
    greeting = " Hello!!!";
    result = strcat(greeting, name); // Сдесь программа вылетает
    return result;

}

HHello.h
/ заголовочный файл класса HHello.h
// интерфейс класса

namespace hello {
// объявление класса
class CppHello // имя класса
{
public: // спецификатор доступа public
    // пример объявления строки
    char *name = new char[1000]; // name
    char *greeting = new char[1000];
    char *result = new char[1000];
    CppHello(); // конструктор класса
    ~CppHello();
    void setName(char *name);
    char *message(); // функция (метод класса) выводящая сообщение на экран
}; // конец объявления класса CppHello
}

Implementation in Python is all for creating a python module from C++
hello.pyx
cdef extern from "HHello.h" namespace "hello":
    cdef cppclass CppHello:
        CppHello() except +
        void setName(char *) except +
        char *message() except +

cdef class PyHello:
    cdef CppHello *cpp_hello
    def __cinit__(self):
        self.cpp_hello = new CppHello()

    def __dealloc__(self):
        del self.cpp_hello

    def setName(self, name):
        self.cpp_hello.setName(name.encode())

    def message(self):
        return "{0}".format(self.cpp_hello.message().decode())

main.py
#-------------------------------------------------------------------------------
# Name:        main
# Purpose:
#
# Author:      ALEX
#
# Created:     06.01.2019
# Copyright:   (c) ALEX 2019
# Licence:     <your licence>
#-------------------------------------------------------------------------------
from time import sleep
from hello import PyHello

def main():
    hello = PyHello()
    hello.setName("Александр")
    # Программа вылетает здесь и Python не ловит ошибку. Да в try except помещал всё равно падает программа 
    print(hello.message()) # -->По задумке должно быть так  Привет Александр
  


if __name__ == '__main__':
    main()
    sleep(3)

Answer the question

In order to leave comments, you need to log in

2 answer(s)
G
GavriKos, 2019-01-07
@sanya84

Run with a debugger. You can also wrap it in a try-catch.

A
Alexander Movchan, 2019-01-07
@Alexander1705

greeting = " Hello!!!";
result = strcat(greeting, name); // Сдесь программа вылетает

Of course it takes off. Use std::string, or learn how to work with pointers.
Memory Leak 1: CppHello::~CppHello() {}.
Memory Leak 2: name = value;.
Memory Leak 3: . Write to protected memory area: PS Segmentation fault does not throw an exception. You can catch it, but you don't have to. The debugger will show where the segfault occurs. PPS Here is more about your mistake: Writing to read-only memorygreeting = " Hello!!!";

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question