这是我的类Cipher.hpp:
#include <string.h>
class Cipher
{
private:
mutable char* m_matrice;
public:
/**
* @brief Uniqement pour debug. A supprimer en prod
*
*/
mutable int m_xor = 0;
/**
* @brief Construct a new Cipher object
* @param matrice Chaine de char entre 33'!' et 126'~'
*/
Cipher(char *matrice);
/**
* @brief
*
* @param matrice Chaine de char entre 33'!' et 126'~'
*/
void setMatrix(char *matrice);
/**
* @brief
*
*/
char *getMatrix();
/**
* @brief
* @param message tableau de char entre 32' ' et 126'~'
*/
void Encode(char *message) const;
/**
* @brief
* @param message tableau de char entre 32' ' et 126'~'
*/
void Decode(char *message) const;
};
这是我班的代码:Cipher.cpp
#include "Cipher.hpp"
#include <stdio.h>
#include <cstdlib>
using namespace std;
/**
* @brief Construct a new Cipher:: Cipher object
* @param matrice Clé de chiffrage
*/
Cipher::Cipher(char *matrice)
{
strcpy(m_matrice, matrice); //Sometimes Triggers "Segmentation fault"
m_xor = 0;
}
char *Cipher::getMatrix()
{
return m_matrice;
}
/**
* @brief définit la Clé de chiffrage
*
* @param matrice Clé de chiffrage
*/
void Cipher::setMatrix(char *matrice)
{
strcpy(m_matrice, matrice);
m_xor = 0;
}
这是主.cpp 的一部分
int main()
{
char matrix[] = "0123456789";
// Constructor
Cipher m_Cipher(matrix);
int Total = 0;
cout << " Total égal : ";
// This cout // sometimes triggers a "segmentation fault"
cout << Total;
// ...
}
该程序运行良好,但根据char matrix[]
:的长度会出现分段错误
char matrix[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX"; // Works well
char matrix[] = "123456789"; // triggers a "segmentation fault"
cout << Total; // sometimes triggers a "segmentation fault"
我很确定问题出在指向char[]的指针上,但我需要一个动态的char数组,我不知道有什么其他方法可以做到这一点。
你能帮我修一下吗?注意:这个程序是针对atmel AVR的,那么我必须使用AVR字符串库(https://www.nongnu.org/avr-libc/user-manual/group__avr__string.html),而不是C++标准(https://learn.microsoft.com/en-us/cpp/standard-library/string?view=msvc-170(
您的问题是这个
mutable char* m_matrice;
用这个
Cipher::Cipher(char *matrice)
{
strcpy(m_matrice, matrice); //Sometimes Triggers "Segmentation fault"
m_xor = 0;
}
指针m_matrixe不指向任何地方,或者指向某个随机位置。
进行
Cipher::Cipher(char *matrice)
{
m_matrice = new char(strlen(matrice + 1));
strcpy(m_matrice, matrice); //Sometimes Triggers "Segmentation fault"
m_xor = 0;
}
你需要在你的析构函数中delete [] m_matrice