创建缓冲区以加载数据时出错

error creating buffer to load data

本文关键字:出错 数据 加载 缓冲区 创建      更新时间:2023-10-16

>我在从文件加载数据时遇到问题。这段代码用一些随机数据填充高分(仅用于调试)

int i = 0; 
for (i = 0; i < MAX_HIGH_SCORE; i++)
{
    high_score_name[i] = al_ustr_new("123456789012345678901");
    high_score[i] = 1000*i;
}

之后,我将所有这些保存到文件中。

ALLEGRO_FILE* high_score_file = al_fopen("hs.txt","wb");
for (i = 0; i < MAX_HIGH_SCORE; i++)
{
    int buffer = al_ustr_size(high_score_name[i]);
    al_fwrite32le(high_score_file, buffer);
    al_fwrite(high_score_file, al_cstr(high_score_name[i]), buffer);
    al_fwrite(high_score_file, &high_score[i], sizeof(high_score[i]));
}
al_fclose(high_score_file);

它工作得很好。它有四个字节保留为大小,然后是 21 个字符high_score_name[]后跟 high_score[] int,它也需要 4 个字节。

当我尝试加载它时,问题开始了。我尝试以多种方式做,但它无法编译,因为行

char* buffer= al_malloc(size); 给出错误:

类型为"

void *"的值不能用于初始化类型为"char *"的实体

for (i = 0; i < MAX_HIGH_SCORE; i++)
{
    int size = al_fread32le(high_score_file);
    char* buffer = al_malloc(size);
    al_fread(high_score_file, buffer, size);
    high_score_name[i] = al_ustr_new_from_buffer(buffer, size);
    int *buffer2 = &high_score[i];          
    al_fread(high_score_file, buffer2, sizeof(high_score[i]));
    al_free(buffer);
}
al_fclose(high_score_file);

坚持了两天,我真的很感激任何帮助。

malloc 的输出具有 void* 类型,您应该尝试将其显式转换为 char* 。

char* buffer = static_cast<char *>(al_malloc(size))

如果你的函数在内部使用 malloc 来分配内存,那么 malloc 返回一个 void*,如果你的al_malloc返回 void*...使用类型强制转换将其转换为字符*。

字符* 缓冲区 = (字符*)al_malloc(大小);

这应该有效。

malloc的功能原型:

  void *malloc(size_t size);