- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道段错误表明我正在尝试访问不应该/尚未分配的内存,但在我的代码中找不到触发此错误的内容。其他答案指出使用 Valgrind,但是我的本地计算机上没有编译器,并且没有管理权限将其安装在学校服务器上。任何指出错误发生位置的帮助将不胜感激。这是头文件
/*
* File: set.h
*
* Copyright: 2015, Darren C. Atkinson
*
* Description: This file contains the public function and type
* declarations for a set abstract data type for strings. A
* set is an unordered collection of distinct elements.
*
* Note that this file uses the bool type, but does not define
* it. You should include <stdbool.h> beforehand.
*/
# ifndef SET_H
# define SET_H
typedef struct set
{
char **elts; //char * array containing strings
int length; //total length of array
int size; //number of strings within array
}SET;
SET *createSet(int maxElts);
void destroySet(SET *sp);
int numElements(SET *sp);
bool hasElement(SET *sp, char *elt);
bool addElement(SET *sp, char *elt);
bool removeElement(SET *sp, char *elt);
# endif /* SET_H */
给定的测试文件与我的代码一起编译。
/*
* File: unique.c
*
* Copyright: 2015, Darren C. Atkinson
*
* Description: This file contains the main function for testing a set
* abstract data type for strings.
*
* The program takes two files as command line arguments, the
* second of which is optional. All words in the first file
* are inserted into the set and the counts of total words and
* total words in the set are printed. If the second file is
* given then all words in the second file are deleted from
* the set and the count printed.
*/
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <stdbool.h>
# include "set.h"
/* This is sufficient for the test cases in /scratch/coen12. */
# define MAX_SIZE 18000
/*
* Function: main
*
* Description: Driver function for the test application.
*/
int main(int argc, char *argv[])
{
FILE *fp;
char buffer[BUFSIZ];
SET *unique;
int words;
/* Check usage and open the first file. */
if (argc == 1 || argc > 3) {
fprintf(stderr, "usage: %s file1 [file2]\n", argv[0]);
exit(EXIT_FAILURE);
}
if ((fp = fopen(argv[1], "r")) == NULL) {
fprintf(stderr, "%s: cannot open %s\n", argv[0], argv[1]);
exit(EXIT_FAILURE);
}
/* Insert all words into the set. */
words = 0;
unique = createSet(MAX_SIZE);
while (fscanf(fp, "%s", buffer) == 1) {
words ++;
addElement(unique, buffer);
}
printf("%d total words\n", words);
printf("%d distinct words\n", numElements(unique));
fclose(fp);
/* Try to open the second file. */
if (argc == 3) {
if ((fp = fopen(argv[2], "r")) == NULL) {
fprintf(stderr, "%s: cannot open %s\n", argv[0], argv[2]);
exit(EXIT_FAILURE);
}
/* Delete all words in the second file. */
while (fscanf(fp, "%s", buffer) == 1)
removeElement(unique, buffer);
printf("%d remaining words\n", numElements(unique));
}
destroySet(unique);
exit(EXIT_SUCCESS);
}
最后是我的代码,这就是错误的根源。
/*
* File: unsorted.c
*
*
* Description: This file contains the definitions for a simple interface for a SET structure that contains a list of strings as well as the list size.
*/
#include <assert.h>
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>
#include "set.h"
int findElement(SET *sp,char *elt);
struct SET
{
char **elts; //char * array containing strings
int length; //total length of array
int size; //number of strings within array
};
//initializes SET
//O(1) efficiancy
SET *createSet(int maxElts)
{
SET *sp;
sp->elts = (char **) malloc(sizeof(char*)*maxElts);
assert(sp->elts!=NULL);
sp->size = 0;
sp->length = maxElts;
return sp;
}
//frees all strings from memory and then the containing array
//O(n) efficiancy n==sp->size
void destroySet(SET *sp)
{
while (sp->size > 0) free(sp->elts[--sp->size]);
free(sp->elts);
}
//return the number of strings within the array
//O(1) efficiency
int numElements(SET *sp)
{
return sp->size;
}
//Sequentially searches SET for elt and return the array location, if not found -1 is returned
//O(n) efficiency n=sp->size
int findElement(SET *sp,char *elt)
{
int i =0;
for (i; i < sp->size; i++)
{
if (strcmp(sp->elts[i],elt) == 0) return i;
}
return -1;
}
//appends elt on the end of the array within SET
//O(1) efficiency
bool addElement(SET *sp, char *elt)
{
if (findElement(sp, elt) != -1) return false;
if (sp->size == sp->length) return false;
sp->elts[sp->size] = (char*) malloc(sizeof(char)*(strlen(elt)+1));
assert(sp->elts[sp->size]!=NULL);
sp->size = sp->size +1;
return true;
}
//returns true if SET contains elt otherwise return false
//O(n) efficiency n=sp->size
bool hasElement(SET *sp, char *elt)
{
if (findElement(sp,elt) == -1) return true;
return false;
}
//finds elt and removes it from array if present, then moves all following strings forward in the array
//O(n) efficiency n=sp->size
bool removeElement(SET *sp,char *elt)
{
int loc = findElement(sp,elt);
if (loc == -1) return false;
free(sp->elts[loc]);
while (loc <sp->size)
{
sp->elts[loc] = sp->elts[loc+1];
loc++;
}
sp->size=sp->size-1;
return true;
}
最佳答案
在函数中:createSet(),
变量 sp 未初始化为指向结构集的实例。
所以代码应该类似于:
SET *sp = NULL;
if( NULL == (sp = malloc( sizeof( struct set ) ) )
{
perror( "malloc for struct set failed" );
exit( EXIT_FAILURE );
}
否则 sp 将包含堆栈上其所在位置的随机地址。
这是未定义的行为,可能会导致段错误事件
关于c - 追踪段错误 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41711501/
我正在开发一个网站,在不使用任何第三方 API 的情况下使用 Firebase 云消息传递(Chrome 和 Firefox 浏览器)向我的订阅者发送推送通知。推送通知发送工作正常,但我不知道“如何跟
我在尝试追踪此 OutOfMemoryError 时遇到了非常糟糕的时间,非常感谢您的帮助。我的应用程序分为架构部分和一个模块,该模块公开一些基本的 REST WS 以及 Hibernate 进行的数
在 Android 操作系统源代码中(路径:/drivers/staging/android/binder_trace.h),我们有一个名为 binder_trace.h 的文件,并且在 /drive
我正在查看我的 CakePHP 应用程序的 error.log,并看到我定期收到此类信息: 2011-07-28 14:49:39 Warning: Warning (2): Missing argu
我收到了有关我的应用程序中内存泄漏的报告,但我无法准确追踪到底发生了什么。我有一个功能可以取出旧 View 并交换新 View 。我没有使用 NavControllers 或任何 @propertie
这是真气! >_< 我编写了一个庞大而复杂的 Haskell 库。我写了一个小测试程序,到目前为止,我已经花了大约 8 个小时试图弄清楚为什么它一直在我身上崩溃。有时 GHC 会提示“奇怪的封闭类型”
是否有系统的方法来调试导致组件在 React 中重新渲染的原因?我放置了一个简单的 console.log() 来查看它渲染了多少次,但我很难弄清楚是什么导致组件渲染多次,即在我的情况下(4 次)。是
我已经升级到 Django 1.4,现在当我运行我的开发服务器时,我收到以下警告: /home/flc/venvs/myprj/lib/python2.6/site-packages/django/v
我有一个 Web 应用程序在某处存在内存泄漏,但我无法检测到它。我已经尝试过 Chrome 开发者工具,通常效果很好,但我无法追踪负责的代码行。 Chrome 工具给了我太多信息,我无法将内存中的对象
直接从标记调用函数的好处之一是更容易跟踪所调用的内容。我想知道是否有浏览器插件或其他东西支持附加(绑定(bind))到元素的每个事件的“Goto javascript 源函数”。理想情况下,这会将我带
我在工作中使用 darcs 已经一年多了,但我一直在问自己同样的问题: 跟踪导致两个补丁之间依赖的代码行/文件/代码更改的最佳方法是什么?目前我的做法如下: 我使用 darcs changes -i
我知道以前有人问过此类问题,但我无法解决我的疑问。我有一个简单的黑白棋引擎(实际上它玩得很好),它使用下面的类来获得最佳棋步: import java.util.*; import java.util
上下文:我们正在构建用于快速交付 WPF 应用程序的框架。该框架使用 Autofac 作为 IoC 容器,还使用 Prism v1 中的区域。我们正在使用 Microsoft 的并行扩展来安排任务
有什么追踪东西的技巧吗?技术?任何可用于检查函数 x 的调用者的工具(调用堆栈的某些部分显示为 ??? 或被跳过)。 --track-origins=yes 是否会使速度变慢(当我尝试这样做时,我使用
我有一个基于 KnockoutJS 2.2.1 创建的 jQuery 网格插件。到目前为止它进展顺利,但是当插件在一个元素上初始化时,'computed' loadGrid 方法调用 3 次。 为了说
我是这种开发的新手。我正在尝试创建一个涉及 GPS 跟踪的 android 应用程序。我正在使用 Nutiteq,因为我必须使用 openstreetmap 作为默认 map 。请帮助我。 最佳答案
我希望用户能够通过我的应用程序之一跟踪他们的 friend 。该应用程序适用于音乐节。 我一直在想办法做到这一点: 让用户为设备设置昵称(与 UDID 关联),并让用户通过昵称将彼此添加到“好友列表”
有没有办法找到所有者或域名示例,如果我给谷歌的IP,我的工具发现谷歌的IP,这应该以编程方式完成地址最喜欢的编程语言将是VC++其他语言也不是问题 最佳答案 您正在寻找的关键字似乎是WHOIS 通常可
我的 VC++ 项目中有几个包含大量类的 map ,其中一些默认可构造,另一些则不能。尝试构建时,出现“没有合适的默认构造函数可用”错误。问题是错误被列为发生在 map.cpp 的第 173 行,这是
我平均工作(约 20k 行代码,Objective-C 与 C++ 混合),我正在努力寻找 EXC_BAD_ACCESS 错误。 我已经尝试了所有常见的技术(比如启用 NSZombie、guard e
我是一名优秀的程序员,十分优秀!