memset 上程序崩溃?

zom*_*rer 3 c pointers memset

我正在挣扎memset

如果我在数组中写入,我的程序就会崩溃。如果我注释掉memset我就没有问题。

我的类型结构:

typedef struct  
{
    char Frage  [maxLEN_F_A];
    char Antwort[maxLEN_F_A];
} Fragenfeld;
Run Code Online (Sandbox Code Playgroud)

我的结构声明:

Fragenfeld QuizFragen[maxFragen];
Fragenfeld *ptrQuizFragen = QuizFragen;
Run Code Online (Sandbox Code Playgroud)

通话memset

memset(&ptrQuizFragen,0,maxFragen*sizeof(Fragenfeld));
Run Code Online (Sandbox Code Playgroud)

我的函数,我在其中编辑地址的值:

int Fragen_einlesen(Fragenfeld *Quizfragen)
{
....
strncpy(Quizfragen->Frage,sEingabe, maxLEN_F_A);
}
Run Code Online (Sandbox Code Playgroud)

tem*_*def 5

当你写的时候

memset(&ptrQuizFragen,0,maxFragen*sizeof(Fragenfeld));
Run Code Online (Sandbox Code Playgroud)

你是说“请将从指针变量的地址开始的ptrQuizFragen大量字节设置为零。” 请注意,这与“请将从 指向的数组开头开始的ptrQuizFragen大量字节设置为零”不同。这意味着字节被写入错误的位置,这就是导致段错误的原因。

从图形上看,设置看起来像这样:

ptrQuizFragen
+-----------+
|           |
+-----------+
      |
      v
+-----------+-----------+-----------+ ... +-----------+
|           |           |           |     |           |
+-----------+-----------+-----------+ ... +-----------+
QuizFragen
Run Code Online (Sandbox Code Playgroud)

您编写的行将字节从ptrQuizFragen内存中的位置开始,其作用如下:

ptrQuizFragen
+-----------+
| 00000000000000000000000000000000000 ... 000000000000 (oops!)
+-----------+
       
       
+-----------+-----------+-----------+ ... +-----------+
|           |           |           |     |           |
+-----------+-----------+-----------+ ... +-----------+
QuizFragen
Run Code Online (Sandbox Code Playgroud)

你想要的线是

memset(ptrQuizFragen, 0, maxFragen * sizeof(Fragenfeld));
Run Code Online (Sandbox Code Playgroud)

它表示将字节放在 指向的内存位置ptrQuizFragen。那会这样做:

ptrQuizFragen
+-----------+
|           |
+-----------+
      |
      v
+-----------+-----------+-----------+ ... +-----------+
| 000000000 | 000000000 | 000000000 |     | 000000000 |
+-----------+-----------+-----------+ ... +-----------+
QuizFragen
Run Code Online (Sandbox Code Playgroud)