- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经阅读了很多相关内容,但找不到错误。
我有一个程序来判断是否在另一个较长的 CSV 字符串中找到字符串值(在下面的代码中,inIP 是 IPv4 地址,allow_hosts 应该是IPv4 地址的 CSV 列表,但它应该适用于任何字符串和 CSV 字符串列表)。
代码如下:
bool stringFound(char* inIP,char* allow_hosts){
bool found=false;
int i =0;
int j =0;
char* ip;
printf("strlen(allow_hosts)=%d\n",strlen(allow_hosts));
while(i<strlen(allow_hosts) && !found){
j=i;
while(allow_hosts[i]!=',' && i<strlen(allow_hosts)){
i++;
}
printf("jota = %d\n",j);
printf("i = %d\n",i);
printf("i-j+1 = %d\n",i-j+1);
ip = malloc(i-j+1);//1 more for '\0'
strncpy(ip,allow_hosts+j,i);//line 25, illegal access, problem one
printf("it copies=%s\n",ip);
ip[i-j]='\0';
found = strcmp(ip,inIP)==0;
//free(ip);//Problem two
if(found)
return found;
i++;
}
return found;
};
当我测试一次时,没有问题并且结果是正确的,但是,当我连续多次运行它时,第三次或第四次给我这个错误:
malloc.c:2372: sysmalloc: Assertion
`(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2]))
- __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0)
|| ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof
(struct malloc_chunk, fd_nextsize))+((2 *(sizeof(size_t))) - 1))
& ~((2 *(sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) &&
((unsigned long) old_end & pagemask) == 0)' failed.
Aborted (core dumped)
据我所知,这是 malloc 的问题,但是当我用 调用它时,我分配的内存量是足够的
stringFound("8.8.7.8","127.0.0.1,8.8.8.8");
stringFound("8.8.54.8","127.0.0.1,8.8.8.8,192.168.92.3");
正在打印
jota = 10
i = 17
i-j+1 = 8
it copies=8.8.8.8
strlen(allow_hosts)=30
jota = 0
i = 9
i-j+1 = 10
//the error I showed above appears here
我还使用 Valgrind 对其进行了测试,只是将其命名为 valgrind ./myProgram,它显示:
==3406== Invalid write of size 1
==3406== at 0x402D763: strncpy (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==3406== by 0x80485EB: stringFound (esta.c:25)
==3406== by 0x80486CC: test (esta.c:49)
==3406== by 0x8048803: main (esta.c:75)
==3406== Address 0x41fe0f0 is 0 bytes after a block of size 8 alloc'd
“test”是多次调用我的过程的函数,第 25 行在代码中被标记为“此处有问题”。
正如你所看到的,我在 free() 行中有一条评论。如果我使用这一行,错误将更改为
Error in `./esta': free(): invalid next size (fast): 0x09d11008
Aborted (core dumped)
我认为这两个错误是由同一原因引起的,但我没有找到错误
最佳答案
strncpy(ip,allow_hosts+j,i);//line 25, illegal access, problem one
是的,这应该会导致问题。我认为第三个参数应该是 i-j
,而不是 i
。
关于c - malloc 和 strcpy,非法访问,C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33548983/
请解释以下程序中发生了什么。 我在程序的开头和结尾检查了 strerror(errno) 返回的地址,并确认它每次都返回相同的地址。然后一旦确定这一点,在第一种情况下我继续将相同的地址分配给 ptr,
我正在尝试使用指针将字符串 str 复制到 str 中。我认为这可以使用单个指针本身来实现。每当我运行我的代码时,我都会显示 str1 但带有过多不需要的垃圾字符。请帮忙。提供一些见解 #includ
长话短说,我正在制作这款 3D OpenGL 构建器游戏。细节并不重要,但这是我的问题。我有这个字符串数组: char building_category_names_UPPER_CASE[][30]
我想使用 strcpy 将我所有的参数连接成一个字符指针。我正在这样做,但我的输出只是一个空格。 我使用了 3 个变量:'concat'(应该是我的输出)、'size' 来获取所有参数的长度和'kar
如果我有一个字符串数组 char* q[2]; q[0] = "Hello"; q[1] = "World"; 我想将 q[0] 放入一个新的字符串数组中 char* x[2]; 在 x[0] 中调用
我正在查看一个 strcpy 示例,其中他们增加了一个指针的值,并在 1 行中分配它,如下所示: *ptrA++ = *ptrB++; 我知道char数组中指针指向的值增加了,复制了内容。 c 会做类
我在 C 程序中使用了一个特定的数据结构,我用它来将类型信息附加到值。一个简单的示例如下所示: #include #include #include struct teststruct {
我需要将用户的输入存储到字符串数组中。 #include #include #include char *history[10] = {0}; int main (void) { cha
#include #include int main() { char *str, *temp; str = malloc(sizeof(char) * 100); fge
我有这样一个基本结构 typedef struct struck { char* id; char* mat; int value; char* place; } *T
我有一个以 开头的函数 void findErrors(int lineIndex){ char *line; strcpy(line, lines[lineIndex]); 然后调用另一个函
我运行了以下程序: #include #include #include int main() { char *p, *q; p = (char*)malloc(1); q =
Closed. This question is off-topic。它当前不接受答案。
每次我尝试将字符串插入程序中的二叉树时,我都必须使用 strcpy 并使用 strcpy 的目标才能成功插入。如果我不使用 strcpy 并仅使用源代码,程序将会崩溃。 示例: char *origi
我的代码给我带来了段错误。我调试了一下,执行strcpy时出现错误。该代码尝试从文本文件中提取数据并将其存储到结构数组中。我计划使用 strcpy 将文本文件的数据存储到结构中。知道为什么会发生这种情
#include #include #include char *vStrs[] = {"Max", "Moritz", "Bolte", "Hans Huckebein", "Helene",
我想知道是否有人可以帮助我解决这个段错误,valgrind 和 gdb 指向 strcpy(),但我仍然找不到它.. void listusers(userstat* ptustat) { F
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我有一个关于 strcpy() 的问题。据我了解,我认为 strcpy 复制位于指针处的字节,而不是指针本身。但这段代码似乎 react 不同。 char* str2 = (char*) mallo
我正在开发一个使用 UDP 协议(protocol)传输文件的项目,但是当我使用 strcpy() 将缓冲区复制到另一个字符串时,它总是丢失一些字符。 简单的想法是:我定义了一个结构: struct
我是一名优秀的程序员,十分优秀!