Tag: 内存

什么可以导致Valgrind堆栈跟踪中的奇怪地址?

(这个问题与从valgrind输出中过滤掉垃圾有关)。 我正在尝试调试一个大部分项目中的内存泄漏,这个项目大部分都不在我的手中 – 它是代码库的一个分支,大约有数百万行代码,尽管大部分可能与代码库无关。我正在努力的一小部分。 由于手工查看它非常困难,我正在尝试使用valgrind来追踪泄漏。 问题是堆栈跟踪看起来像这样: ==83597== 920 bytes in 1 blocks are possibly lost in loss record 750 of 864 ==83597== at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==83597== by 0x548EF93: myproject_malloc (mysourcefile.c:48) ==83597== by 0x4F13FD5: ??? (in /path/to/project/library-version.so) ==83597== by 0xFFEFFFD5F: ??? ==83597== by 0x38F: ??? ==83597== by 0xFFEFFFE5F: ??? ==83597== by 0xF: ??? ==83597== […]

C中的字符串和指针

#include #include #include int main(void) { char* a = malloc(5 * sizeof(char)); a = “1”; free(a); } 关于上面的代码我有两个问题: 当我初始化这样的代码时,为什么代码会给free(a)带来错误: a =“1” 并且在我初始化这样的时候不会给free(a)带来任何错误: a [0] =’1’。 当我使用[0] =’1’初始化a并使用printf(“%s”,a)打印字符串a为什么我得到结果 ‘1’ 没有用’\ 0’声明第二个索引?

通过写入2D数组来分割错误

我的程序中有一个小的内存访问问题,我没有找到错误,也许有人可以帮助我。 我创建了一个新类型来存储rgb颜色值。 那种类型看起来像: typedef struct pixel { unsigned char r; unsigned char g; unsigned char b; } pixel; 在我的主程序中,我用calloc创建了一个2D动态数组,用于存储红色信息。 pixel **pixelvalue = (pixel **) calloc(imginformation.width, sizeof(pixel)); for (i = 0; i < imginformation.width; i++) { pixelvalue[i] = (pixel *) calloc(imginformation.height, sizeof(pixel)); } 之后我调用我的函数,它读取颜色值,谁应该将它们安全地保存到数组中。 该函数作为参数获取数组。 ReadFile(file, imginformation (Stuff like height and so one), pixelvalue (The calloc […]

为什么我可以修改C中的const指针?

今天我尝试使用const标识符,但我发现const变量仍然可以修改,这让我感到困惑。 以下是代码,在compare(const void * a,const void * b)函数中,我试图修改a指向的值: #include #include int values[] = {40, 10, 100, 90, 20, 25}; int compare (const void *a, const void*b) { *(int*)a=2; /* Then the value that a points to will be changed! */ return ( *(int*)a – *(int*)b); } int main () { int n; qsort(values, 6, sizeof(int), […]

为什么在没有数据复制的情况下,像realloc()这样的标准C库中没有函数?

例如,我想要这样一个function: char *dst = (char*)malloc(512); char *src = (char*)malloc(1024); … dst = (char*)realloc(dst, 1024); memcpy(dst, src, 1024); 如您所见,我只想让函数realloc()扩展缓冲区的大小,但C库中的realloc()可能会复制旧地址中的数据。 那么在我想要的任何库中都有一个函数吗?

内存映射库osx的文件名

我需要获取当前应用程序的所有内存映射库的文件名。 目前我正在通过vm_region浏览所有映射的库。 遗憾的是,它没有提供有关当前区域的文件名的信息。 有没有办法在c中获取此信息而无需在vmmap上执行popen?

C编程中的内存处理策略是什么?

我自己的一个策略是在程序启动时分配5兆字节的内存(或者你认为必要的任何数字)。 然后,当任何时候程序的malloc()返回NULL ,你释放5兆字节并再次调用malloc() ,这将成功并让程序继续运行。 您对此策略有何看法? 你还知道其他什么策略? 谢谢,Boda Cydo。

为什么局部变量的地址每次都不一样?

我问Google并对StackOverflow进行了一些研究。 我的问题是,当我在C ++程序中输入main()函数并声明第一个变量时,为什么这个变量的地址会因不同的执行而有所不同? 请参阅下面的示例程序: #include int main() { int *a = new int; int *b = new int; std::cout << "address: " << a << " " << b << std::endl; std::cout << "address of locals: " << &a << " " << &b << std::endl; return 0; } 执行结果1: address: 0xa32010 0xa32030 address of […]

了解联合的内存内容

假设我定义了一个这样的联合: #include int main() { union u { int i; float f; }; union u tst; tst.f = 23.45; printf(“%d\n”, tst.i); return 0; } 有人能告诉我tst存储的内存会是什么样的? 我想了解这个程序产生的输出1102813594 。

realloc调用引入了多少开销?

我在for循环的每次迭代中使用realloc ,迭代次数超过10000次。 这是一个好习惯吗? 如果多次调用realloc会导致错误吗?