c - stbi_load() 返回空字符串“”
问题描述
我使用 stbi_load 具有以下功能:
void load_texture_from_file(const char *file, bool alpha, const char *name) {
Texture *tex;
tex = malloc(sizeof(Texture));
tex->name = name;
int width, height, channels;
unsigned char *data = stbi_load(file, &width, &height, &channels, 0);
generate_texture(width, height, data, tex, alpha);
stbi_image_free(data);
}
文件来自:
load_texture_from_file("/home/correct_folder/correct_name.png", true, "sprite");
使用 stbi_failure_reason() 没有错误,使用 gdb 检查数据内容时,我看到:
Thread 1 "a" hit Breakpoint 2, load_texture_from_file (file=0x555555579d18 "/home/correct_folder/correct_name.png",
alpha=true, name=0x555555579d12 "face") at resource_manager.c:25
25 generate_texture(width, height, data, tex, alpha);
(gdb) print data
$1 = (unsigned char *) 0x7ffff40c1010 ""
我错过了什么?
解决方案
要扩展@HolyBlackCat 的评论,您在加载数据方面可能根本没有做错任何事情。您应该尝试使用 gdb 来检查内存,而不是print
ing 它,它被data
视为字符串。您可以使用以下命令在 gdb 中执行此操作:
x/nfu <address>
在哪里
x/
是“检查记忆”命令n
是您要检查的内存单元/元素的数量f
是显示格式('x' 表示十六进制,'d' 表示十进制等。请参见下面的链接)u
是单位/元素格式('b' 表示字节,'w' 表示单词等。请参见下面的链接)address
是您要开始检查内存的地址
例如,要查看data
十六进制格式的前 5 个字节,您可以输入
x/5xb data
要查看十六进制格式的前十个 4 字节字,您可以输入
x/10xw data
有关更多信息和所有参数选项的详尽列表,请参阅此页面。
推荐阅读
- colors - THREE.js 使用 lerpColors 制作渐变
- java - 为什么我的 leetcode 递归回溯方法使用这样的参数是错误的?
- python - 在 Matplotlib 中绘制 K-Means:ValueError:x 和 y 必须具有相同的第一维,但具有形状 (10,) 和 (1,)
- r - 在 R 中保存指定环境的语法是什么?
- tensorflow - 神经网络回归的 NaN 泊松损失值
- swift - NSFont.TextStyleOptionKey 中可以使用哪些值
- python - 如何防止版主在 discord.py 中互相使用版主命令?
- azure - 证书 VerifyNoRevocation() 在 Azure APIM 中返回 false - 幕后发生了什么?
- laravel - Laravel 8 - 没有数据库连接的资源路由
- pydantic - 如何使用 pydantic 创建 MappingModel?