首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Ultralite数据库iPhone中插入二进制数据时出错

在Ultralite数据库iPhone中插入二进制数据时出错
EN

Stack Overflow用户
提问于 2011-07-12 19:14:53
回答 1查看 250关注 0票数 0

您好,我正在编写一个iphone应用程序,我需要在其中存储二进制数据,即Ultralite数据库中的图像。为此,我使用了以下代码。

代码语言:javascript
复制
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"file_name" ofType:@"png"];
NSData *data = [NSData dataWithContentsOfFile:filePath];
NSUInteger len = [data length];
ul_binary *byteData = (ul_binary*)malloc(len);
memcpy(byteData, [data bytes], len);

ULTable *table = connection->OpenTable("NAMES");
if(table->InsertBegin()){
    table->SetInt(1, (maxId+1));
    table->SetString(2, [name UTF8String]);
    table->SetBinary(3, byteData);
    table->Insert();
    table->Close();
    connection->Commit();
}

此代码在以下行给出错误'EXC_BAD_ERROR‘::

代码语言:javascript
复制
table->SetBinary(3, byteData);

如果我注释这一行,这段代码工作得很好。

任何帮助都将不胜感激!谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-12 19:35:44

ul_binary的定义如下:

代码语言:javascript
复制
typedef struct ul_binary {
    /// The number of bytes in the value.
    ul_length       len;
    /// The actual data to be set (for insert) or that was fetched (for select).
    ul_byte     data[ MAX_UL_BINARY ];
} ul_binary, * p_ul_binary;

所以它是一个结构体。通过像这样简单地执行memcpy,还会覆盖len字段,所有事情都会变得一团糟。下面是你应该怎么做(据我所知):

代码语言:javascript
复制
ul_binary *byteData = (ul_binary *)malloc(sizeof(ul_binary));
memcpy(&byteData->data, [data bytes], len);
byteData->len = len;

在尝试分配内存之前,还需要检查该len <= MAX_UL_BINARY。还有,别忘了free(byteData);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6663332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档