- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是新来的,而且是德语,所以请原谅我的英语不好。作为学校练习的一部分,我们应该实现一个带有用于键值存储的共享内存的套接字服务器,在基于 UNIX 的系统上运行。服务器、共享内存和 fork() 正在工作。我们使用一个结构数组,并为此创建了函数(put、get、delete)。在 put 方法中,当我们复制两个字符串时,我们会得到这个 BAD_ACCESS。该方法的代码如下,我们存储库的链接在这里:Github Repo
int put(int key, char *value, char *resp){
int emptyIndex = -1;
//strcpy(resp, "");
resp = "";
for(int i = 0; i < STORELENGTH; i++){
// If the key exists, overwrite it, give back previous value, and return true
if(kv[i].key == key) {
resp = kv[i].value;
kv[i].value = value;
return 1;
}
// If the key doesn't exist, remember the empty index
if(kv[i].key == NULL){
emptyIndex = i;
}
}
// If there was an empty index, just reuse it
if(emptyIndex > -1) {
kv[emptyIndex].key = key;
resp = "";
kv[emptyIndex].value = value;
return 1;
}
*resp = (char) "Error: Put was not successful.";
return -1;
}
如您所见,strcpy-Function 是一个注释,因为程序立即停止工作。感谢您的帮助,亚历克斯
最佳答案
假设 resp 应该是 main.c
中的一个字符串,您错误地初始化了它:
char *resp = ""; <- This one is bad
//char resp[BUFSIZ]; <-- This one is good but commented.
因此,您的 resp
是分配大小为 1 的 char*。而 strcpy
需要至少 2 的大小 - 一个用于“”,您复制一个对于“\0” - 字符串终止符。这就是为什么当您尝试将长度 2 放入长度为 1 的 resp 时,您的应用会崩溃 - 您正在尝试写入不属于您的内存。
也可以代替:
*resp = (char) "Error: Put was not successful.";
您还应该使用strcpy
。我建议如下:
<强>1。阅读数组和指针以更好地理解它
<强>2。如果您不熟悉您正在使用的函数,请阅读它们的文档,例如 strcpy .它包含一些有值(value)的信息,例如:
To avoid overflows, the size of the array pointed by destination shall be long enough to contain the same C string as source (including the terminating null character), and should not overlap in memory with source.
<强>3。了解调试 - 恕我直言,这是最重要的事情之一!例如this link描述了内存分配和调试技术的一些要点。
所有这些都可以让您 future 的生活更轻松:)
关于c - 共享内存中带有 strcpy 的 BAD_ACCESS (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44391072/
当我从 EKEvent 访问生日ContactIdentifier 属性时,我总是立即收到 BAD_ACCESS 错误(甚至无法进行 nil 检查) 这是我用来获取的代码 import UIKit
我有 A 类和 B 类。我正在从 A 类调用 B 类。这里我的问题是 A 类的宽度和高度取决于 B 类。当 sizeForScrollView 属性(B 类属性)更改时我想要通知。一切正常。但是当我当
我正在从 ARKit 捕获一帧并从中获取 CVPixelBuffer func session(_ session: ARSession, didUpdate frame: ARFrame) {
我想保留我的风景。为此,我正在使用此代码,但 BAD_ACCESS 即将到来。在这里,我正在为相机 overlayView 编写这段代码。 -(void)viewDidLoad { [[
当我尝试使用我在 iPhone 开发中从本地 SQLITE 数据库中选择的值执行任何操作时,我收到 EXC_BAD_ACCESS。我的功能代码是 -(void) updateFromDB { // S
我用 Xcode 编写。我的代码应该将文本文件逐行读取到指针数组 *ar[] 中。我使用了一个简单的循环,通过 getc() 将每个字符读取到 c,并将 c 读取到 *ar[i]。如果 c!= '\n
我在 Xcode 7.3 上的 Swift 2.2 中发现了一个奇怪的错误(或者这不是错误但我做错了什么)。 我有一个枚举,其中一个案例和类将此枚举作为初始化程序的参数 enum OneCaseEnu
我正在浏览一个可变参数列表,当我到达列表中的最后一个对象时,我总是会收到 BAD_ACCESS 错误。我强烈认为它是 ARC相关问题。 这是我的做法: -(NSString *)replaceToke
我有一个由 NSFetchedResultsController 提供的 UITableViewController。 一切正常,直到我添加 if (self.fetchedResultsContro
好吧,我完全不知所措了。一小部分用户在我的主机名翻译中似乎存在 BAD_ACCESS 错误。 完整的崩溃如下: Exception Type: EXC_BAD_ACCESS (SIGSEGV) Ex
由于某种原因,我的应用程序崩溃了,我不确定是什么原因导致了问题,除了它似乎与处理文件时跨越的调度队列有关。任何帮助将不胜感激。 Crashed Thread: 0 Dispatch queue:
这听起来可能是个新手问题,但我是 iOS 开发新手, 最近我切换到 ARC 并在我的代码中遇到以下问题。我已经使用以下 init 方法实现了一个类 - (id)init { self = [s
下面是我上传日志文件到FTP的代码,问题是有时执行[mInputStream open]时会崩溃。 XCode 显示 BAD_ACCESS。我猜这可能是由于上传大文件造成的。然而,即使文件很小,有时也
我正在尝试像这样实例化 UiAlertView: UIAlertView *alert = [[UIAlertView alloc]
我在使用异步调度时遇到了一个非常奇怪的错误访问错误。我设法将其减少到程序中的这段代码。 -(void)buttonTapped:(id)sender { __block NSArray*foo
我有一个属性(noARC) @property (nonatomic, retain) NSString *itemUUID; 和一个初始化 - (void) viewDidAppear:(BOOL)
我在子类 UIImageview 中有一个 CGMutablePathRef 属性。当我创建新路径并将其分配给属性时,CGPathRelease 在我调用 CGPathContainsPoint 时会
在运行时循环两次,在通过请求查询调用 PrepareStatement 时因 Bad_Access 而崩溃。 所以我检查了所有的 ResultSet 内存并释放了它但是没有想法有什么办法可以解决这个问
也许我不打算使用 CoreData 显示选定行的详细信息,但我无法弄清楚为什么我会收到“BAD_ACCESS”错误。我用谷歌搜索,找不到我要找的东西。 基本上,我使用 CoreData 来填充 Tab
我有一个带有 3 个 View Controller 的应用程序,它们被推送到导航 Controller 堆栈上。 (A) -> (B) -> (C) (A) 在 viewWillAppear 中注册
我是一名优秀的程序员,十分优秀!