- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了这个小程序来查找较大字符串中所有出现的子字符串,或者干草堆中的针。当我在本地运行该程序时,它似乎工作得很好。然而,当我将其提交给在线竞赛进行评审时,它给出了 SIGBART 错误。我认为这是因为内存管理不善,所以我删除了 free()
函数调用,但随后我收到了 Time Limit Exceeded 错误(但 SIGBART 错误消失了) )。删除 free()
调用会减慢程序速度吗?我的程序有没有漏洞?
这是我正在谈论的比赛: Needle in the Haystack
代码如下:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define RAW_INPUT_SIZE 10000
#define BOOL unsigned int
#define NO 0
#define YES 1
int main (int argc, char **argv)
{
int needleLength;
char *rawNeedle = (char *)malloc(RAW_INPUT_SIZE);
char *rawHaystack = (char *)malloc(RAW_INPUT_SIZE);
char *needle; // to be allocated later
char *haystack; // to be allocated later, but not deallocated
while (scanf("%i\n%s\n%s", &needleLength, rawNeedle, rawHaystack) != EOF)
{
needle = (char *)malloc(needleLength);
strncpy(needle, rawNeedle, needleLength);
haystack = strchr(rawHaystack, needle[0]);
int i = haystack - rawHaystack;
BOOL matchesFound = NO;
if (i + needleLength - 1 < strlen(rawHaystack))
{
while (haystack != NULL)
{
if (i + needleLength - 1 < strlen(rawHaystack))
{
char *substr = (char *)malloc(needleLength);
strncpy(substr, haystack, needleLength);
if (strcmp(needle, substr) == 0)
{
printf("%i\n", i);
matchesFound = YES;
}
free(substr);
substr = NULL;
}
haystack = strchr(haystack+1, needle[0]);
i = haystack - rawHaystack;
}
}
if (matchesFound == NO)
printf("\n");
free(needle);
needle = NULL;
}
free(rawNeedle);
free(rawHaystack);
rawNeedle = NULL;
rawHaystack = NULL;
return 0;
}
<小时/>
问题输入和输出规范的转录
Input
The input consists of a number of test cases. Each test case is composed of three lines, containing:
- the length of the needle,
- the needle itself,
- the haystack.
The length of the needle is only limited by the memory available to your program, so do not make any assumptions - instead, read the length and allocate memory as needed. The haystack is not limited in size, which implies that your program should not read the whole haystack at once. The KMP algorithm is stream-based, i.e. it processes the haystack character by character, so this is not a problem.
The test cases come one after another, each occupying three lines, with no additional space or line breaks in between.
Output
For each test case your program should output all positions of the needle's occurences within the haystack. If a match is found, the output should contain the position of the first character of the match. Characters in the haystack are numbered starting with zero.
For a given test case, the positions output should be sorted in ascending order, and each of these should be printed in a separate line. For two different test cases, the positions should be separated by an empty line.
最佳答案
为什么要使用内存分配?如果规范中包含的最大针长度为 10,000,则只需使用本地数组:
char needle[RAW_INPUT_SIZE];
char haystack[RAW_INPUT_SIZE];
直接阅读这些;不要复制它们。
char *substr = (char *)malloc(needleLength);
strncpy(substr, haystack, needleLength);
if (strcmp(needle, substr) == 0)
不清楚您的针长度是否包括尾随空值。因此,这不会分配足够的空间,并且不能保证空终止,这两者都很容易导致 SIGABRT 问题。
在你的干草堆上重复使用strlen()
会让你的程序运行缓慢。您无需对每个针和干草堆执行多次 strlen()
即可计算长度。
除非保证数据中没有空格,否则您的 scanf()
代码读取的数据将低于您的预期。您应该始终检查是否获得了您期望的所有值。
您应该查找函数strstr()
。
关于c - C 代码中的 SIGBART 与 malloc/free,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9407639/
我正在使用 swift 在 xcode 9 中构建一个应用程序。我最近使用 cocoa pod 将 firebase 安装到我的项目中。我相当确定我安装正确,但是在进行更改并摆弄 View Contr
当使用 NSMutableDictionary 时,我在 iOS 中出现了一些非常奇怪的行为。我正在使用以下代码从应用程序委托(delegate)访问字典。 self.dictTyp = appDel
简单的问题,但这给了我一个错误,我似乎无法解决它。 在我的对象(UIViewController)中,我在 .h 中声明了一个方法 -(void)setCurrentLoc:(CLLocation *
当我尝试为我的社交媒体应用程序获取图像选择器 Controller 时,它给我一个错误! [access] 我尝试制作另一个项目并使用其他 View Controller 和 UITapGestur
所以我有两个 View ,我试图与导航连接。 我已将它们嵌入到导航 Controller 中,并在 Storyboard 中创建了它们之间的 push segue: 在第一个 Controller 的
我刚刚开始在 Udemy 上使用 Xcode 进行编码类(class)。我相信我已经拿到了 7.2 beta。我在做cat项目的时候遇到了这个错误。 // AppDelegate.swift //
我知道以前有人问过这个问题,但我不明白为什么会这样。发生这种情况的原因似乎有很多。 当我在我的一个 View 上单击一个按钮(称为下一个)时,就会发生这种情况。我会给你 View 的代码和它后面的 V
我正在使用 Firebase 和云消息传递做一些事情。 问题是我需要在 FirebaseApp.configure() 之前调用 application.registerForRemoteNotifi
当调用 segue 到 viewController 时,我收到 SIGBART 错误。 执行进入此函数并在 return 语句处停止,并出现错误 SIGBART。 int main(int argc
从头开始一个 Xcode 项目。选定的单一 View 选项。放在 View 上方的 TableView 中。选择了1个细胞原型(prototype)。创建了一个单元标识符“cell”。添加了 UITa
我找不到我的程序抛出 SIGBART 错误的原因。 我在调用此函数时缩小了范围。 bool Node::isEdgeConnected(Node vertex1, Node vertex2){ //I
我编写了这个小程序来查找较大字符串中所有出现的子字符串,或者干草堆中的针。当我在本地运行该程序时,它似乎工作得很好。然而,当我将其提交给在线竞赛进行评审时,它给出了 SIGBART 错误。我认为这是因
我最近更新 iOS 后开始收到此错误。我认为这与我的约束的格式有关,但我无法弄清楚。这是我的错误消息 由于未捕获的异常“NSInvalidLayoutConstraintException”而终止应用
大家 第一次在这里发帖,但是什么都没有。我目前正在为我正在为学校开发的应用程序做出贡献。我最近添加的功能是该应用程序的计划功能。昨天,该应用程序能够创建、移动、存储和删除作业。今天,我的目标是添加编辑
我面临着创建一个类的静态函数的问题 我正在开发一个需要自定义输入 View 的应用程序。我的想法是把这个函数作为一个 go-to,这样无论什么类型的 UIKit 组件需要这个自定义输入 View 都可
我正在尝试进入 iOS 编程。我有最新的 XCode,4.2 Build 4D177b。我从一个带有 ARC 的单一 View 应用程序开始。我在上面放置了一个 UITextField 并使用拖动来获
我正在尝试创建一个应用程序,根据选定的颜色记录当前日历日的单元格。我已经使该部分正常工作,但后来我添加了另一个名为“ToDoViewViewController”的 UIViewController,
我是一名优秀的程序员,十分优秀!