gpt4 book ai didi

c - memset上的程序崩溃?

转载 作者:行者123 更新时间:2023-12-05 00:54:19 47 4
gpt4 key购买 nike

我正在为 memset 苦苦挣扎。

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

我的类型结构:

typedef struct  
{
char Frage [maxLEN_F_A];
char Antwort[maxLEN_F_A];
} Fragenfeld;

我的结构声明:

Fragenfeld QuizFragen[maxFragen];
Fragenfeld *ptrQuizFragen = QuizFragen;

memset 调用:

memset(&ptrQuizFragen,0,maxFragen*sizeof(Fragenfeld));

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

int Fragen_einlesen(Fragenfeld *Quizfragen)
{
....
strncpy(Quizfragen->Frage,sEingabe, maxLEN_F_A);
}

最佳答案

当你写作时

memset(&ptrQuizFragen,0,maxFragen*sizeof(Fragenfeld));

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

从图形上看,设置如下所示:

ptrQuizFragen
+-----------+
| |
+-----------+
|
v
+-----------+-----------+-----------+ ... +-----------+
| | | | | |
+-----------+-----------+-----------+ ... +-----------+
QuizFragen

你写的那行把字节从 ptrQuizFragen 在内存中的位置开始,这样做:

ptrQuizFragen
+-----------+
| 00000000000000000000000000000000000 ... 000000000000 (oops!)
+-----------+


+-----------+-----------+-----------+ ... +-----------+
| | | | | |
+-----------+-----------+-----------+ ... +-----------+
QuizFragen

你想要的线是

memset(ptrQuizFragen, 0, maxFragen * sizeof(Fragenfeld));

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

ptrQuizFragen
+-----------+
| |
+-----------+
|
v
+-----------+-----------+-----------+ ... +-----------+
| 000000000 | 000000000 | 000000000 | | 000000000 |
+-----------+-----------+-----------+ ... +-----------+
QuizFragen

关于c - memset上的程序崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66627369/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com