我正面临着这个错误,我从来没有遇到过使用valgrind的问题,你们有什么建议吗?我是C语言的新手,还在学习。谢谢! 这低于我使用valgrind得到的错误。 ==8410== Source and destination overlap in strcpy(0xfff000560, 0xfff000560)
==8410== at 0x4C2E272: strcpy (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8410== by 0x40126B: trim (in /********/********/
我到处搜索如何修复这个问题,但是我找不到任何东西,所以如果在这个问题上已经有了一个线程,我很抱歉。而且,我对Linux、GDP和StackOverflow相当陌生,这是我的第一篇文章。
首先,我在Debian /Linux9上运行Windows子系统的Linux,当我启动gdb时,我得到如下信息:
GNU gdb (Debian 7.12-6) 7.12.0.20161007-git
...
This GDB was configured as "x86_64-linux-gnu".
...
另外,当我显示配置时,我得到了以下内容:
configure --host=x86_6
我在mac和linux上运行了以下代码:
#include <stdio.h>
#include <string.h>
int main (int argc, char *argv[]){
int value = 5;
char buffer_one[8], buffer_two[8];
strcpy(buffer_one, "one");
strcpy(buffer_two, "two");
printf("[BEFORE] buffer_two is at %p and cont
这里我有一个非常简单的程序,输出对我来说非常奇怪,
#include "stdio.h"
#include "string.h"
void func_stack();
int main(int argc, char *argv[]) {
func_stack();
}
void func_stack() {
int a = -1;
char s[4];
int b = -1;
strcpy(s,"1234");
printf("a+b result to %d\n",a+b)
我在mac和linux上运行了以下代码:
#include <stdio.h>
#include <string.h>
int main (int argc, char *argv[]){
int value = 5;
char buffer_one[8], buffer_two[8];
strcpy(buffer_one, "one");
strcpy(buffer_two, "two");
printf("[BEFORE] buffer_two is at %p and contains \'%s\'\
我对我的记忆有问题。我一直在努力找出出了什么问题,但我似乎找不到。以下是我的问题:
==32233== Invalid write of size 1
==32233== at 0x4C2E1E0: strcpy (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==32233== by 0x4010C7: songCopy (song.c:102)
==32233== by 0x4009E6: main (songtest.c:82)
==32233== Address 0x51fda09 is 0 byte
我有一个连接到服务器的软件,然后以块的MAXIMUM读取数据,然后将读取的数据复制到堆缓冲区中,每件事情都可以正常工作,不会出现任何错误或seg错误,但是当与val研一起使用时,它会检测到与strcpy一起使用的未初始化变量。
void func()
{
// connects to server then enters this loop to receive data
while(1)
{
ret = recv(sd, resp, MAXIMUM);
if (ret <= 0)break;
else
我对C很陌生,我发现gcc的一个奇特的输出让我很难找到答案。运行应用程序时出现的错误是:
*** stack smashing detected ***: /home/joshua/Research/cml/test terminated
Program received signal SIGABRT, Aborted.
0x00007ffff7a43428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
54 ../sysdeps/unix/sysv/linux/raise.c: No su
linux的排序命令必须对文本文件的行进行排序,并将输出传递到另一个文件。但是我的代码给出了一个运行时错误。请纠正指针错误,以便输出。
我到底应该在哪一行进行修改?因为毕竟没有输出。
我在粘贴整个代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void sortfile(char **arr, int linecount) {
int i, j;
char t[500];
for (i = 1; i < linecount; i++) {
我已经编程一段时间了,但我还是个C新手。我有一个用ansi C实现的链表,我需要测试一下。我已经将问题范围缩小到一个写操作无效的问题。我通过Valgrind运行代码,并收到以下输出:
==18131== Invalid write of size 1
==18131== at 0x4C2C0CC: __GI_strcpy (in /usr/lib/valgrind/vgpreload_memcheck-amd64 linux.so)
==18131== by 0x40089B: main (in /home/btm7984/hw3/TestList)
==18131== Addr