在这段代码中,我想找到句子中最长的单词 在哪里我停止了一个分段错误,我认为是由于函数longerEvenWord()中的内存分配将返回“res”变量;似乎res没有正确分配。通过运行gdb我得到以下错误
Scenario Outline:
* def query = { name: <name>, country: <country>, active: <active>, limit: <limit> }
Given path 'search'
And params query
When method get
Then status 200
# response should NOT contain a key expected to be missing
And match response !contains <missing>
# observe how strings are enclosed in quotes, and we set null-s here below
# and you can get creative by stuffing json into table cells !
Examples:
| name | country | active | limit | missing |
| 'foo' | 'IN' | true | 1 | {} |
| 'bar' | null | null | 5 | { country: '#notnull', active: '#notnull' } |
| 'baz' | 'JP' | null | null | { active: '#notnull', limit: '#notnull' } |
| null | 'US' | null | 3 | { name: '#notnull', active: '#notnull' } |
| null | null | false | null | { name: '#notnull', country: '#notnull', limit: '#notnull' } |
这是代码
Program received signal SIGSEGV, Segmentation fault.
_IO_vfprintf_internal (s=0x0, format=0x400d22 "%s\n",
ap=ap@entry=0x7fffffffdca8) at vfprintf.c:1275
1275 vfprintf.c: No such file or directory.
答案 0 :(得分:1)
这条线是否有可能是您的问题? FILE * fptr = fopen(getenv(“OUTPUT_PATH”),“w”);
fopen可能会失败,并返回NULL,原因与内存损坏无关。也许添加一行,就像上面的那样:
if (fptr == NULL) { perror(“fopen failed”); exit(1); }
答案 1 :(得分:0)
Wikipedia上有一篇文章Dangling Pointer,它可以很好地解释您的代码问题。
简而言之,从函数返回后,所有自动变量都会丢失内存控制。因此,不能假设您存储某些数据的地址将保持不变;例如,另一个功能可能已经覆盖了这个地方。
您可以使用res
使malloc
动态化,并使用strcpy
初始化,如下所示。
char *res = (char *)malloc(134 * sizeof(char));
strcpy(res, "00");
确保在使用后释放动态变量,否则它们会导致内存泄漏,但在程序中它不会成为问题,因为它只是在打印res
后结束。