AVR/C(C++)我在char数组上创建了一个指针类,有时会出现分段错误



这是我的类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

相关内容

  • 没有找到相关文章

最新更新