gpt4 book ai didi

c - 我是否正确加载了我的字符数组?

转载 作者:行者123 更新时间:2023-12-04 18:21:04 27 4
gpt4 key购买 nike

我已经盯着它看了这么久,它开始一起运行。
所以我收到了一个 valgrind 错误:

==25468== Invalid write of size 4
==25468== at 0x52CF64D: _IO_vfscanf (vfscanf.c:1857)
==25468== by 0x52D730A: __isoc99_fscanf (isoc99_fscanf.c:35)
==25468== by 0x402DDB: loadMindRAW (gplib.c:172)
==25468== by 0x4047EE: loadAgent (gplib.c:739)
==25468== by 0x4048BD: loadAgentsFromFile (gplib.c:799)
==25468== by 0x4010C3: initRound (gpfight.c:220)
==25468== by 0x400EBE: main (gpfight.c:99)
==25468== Address 0x584388d is 253 bytes inside a block of size 256 alloc'd
==25468== at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)

这是罪犯:
void loadMindRAW(FILE* f_file, unsigned char* mind)
{
int i;
for(i=0; i < MIND_SIZE; i++)
{
fscanf(f_file,"%d,",&(mind[i]));
}
}

传入的无符号字符数组刚刚被分配:
(MIND_SIZE 为 256)
tmpAgent->mind = malloc(MIND_SIZE*sizeof(unsigned char));
loadMindRAW(f_file, tmpAgent->mind);

我是否正确地指向了我的思想地址? &(mind[i])似乎有点笨拙。原始指针操作, mind+i具有相同的行为。我在这里错过了一些简单的东西吗?

最佳答案

您正确地指向了地址,但您可能没有将指针传递给 unsigned charfscanf处于期望 int 的位置指针。这是因为 fscanf看到 %d说明符,它假定可变参数列表中的相应位置是指向有符号 int 的指针;由于可变参数在 C 和 C++ 中的实现方式,fscanf没有其他办法。

以下是你应该如何重写你的循环:

for(i=0; i < MIND_SIZE; i++)
{
int tmp;
fscanf(f_file,"%d,",&tmp);
mind[i] = (unsigned char)tmp;
}

关于c - 我是否正确加载了我的字符数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10676449/

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