我想要创建一个函数,其中我将扫描数组中的元素(int),并在main中调用这个函数,释放内存也必须在main中。
int main () {
int size = 0;
int* arr = malloc (sizeof(int));
char sign;
int i = 0;
do {
scanf ("%d%c", &arr[i], &sign);
i++;
arr = realloc(arr, sizeof(int) * (i + 1));
} while (sign !
我试图解析一个字符串(从一篇文章到整本书的大小不等),并构建一个临时链接列表来存储每个单独的单词,用任何空格字符分隔。我编写了自己的charAppend()函数,因为我认为我不能使用strcat()并将char* str和char c作为参数传递。最终,我的目标是将这个链接的单词列表组织到哈希表中,当我尝试以<word>:<number of occurrences>格式输出带有printf格式的哈希表内容时,我遇到了一个seg错误。在gdb上,printf的参数似乎是可以的,但是当我运行val差制时,Invalid write of size 1和Invalid re
在C中正确使用指针和数组时,我遇到了一些问题。
我正在做的项目是构建一个简单的动态数组和相应的函数。但是,我似乎找不到正确的语法/函数来动态更新数组大小。相关代码如下:
数组创建:
struct DArray
{
TYPE *data; /* pointer to the data array */
int size; /* Number of elements in the array */
int capacity; /* capacity ofthe array */
};
void initDArray(DArray *v,
我的path_append()函数的函数是。
追加两个字符串,并将它们存储在一个全局字符串中。
在两个字符串的中间加上'/‘。
返回附加的字符串第一个地址。
但是,我们将每个输入都存储在相同的变量中,并带有空终止。
-作为输入"/usr","bin“是给出的。
然后输出应该是--> "/usr/bin“
记忆中应该是这样的。
+---+---+---+---+---+---+---+---+----+
| / | u | s | r | / | b | i | n | \0 |
+---+---+---+---+---+
在使用realloc()时,我用valgrind检查了它,如下所示
valgrind --tool=memcheck --leak-check=yes --show-reachable=yes a.out
而valgrind产生的错误信息是
==6402== Memcheck, a memory error detector.
==6402== Copyright (C) 2002-2005, and GNU GPL'd, by Julian Seward et al.
==6402== Using LibVEX rev 1575, a library for dynamic bin
我必须动态分配单词数组。单词存储在由空格字符的变量计数分隔的文件中。我不知道文件中有多少个单词,它们可以有不同的长度。
我有这样的代码:
void readWord(FILE* stream, char *word, char first_c) {
word[0] = first_c;
char val;
int wlen = 1;
// isWhitespac is my function - tests if char is blank or '\n'
while ((val = fgetc(stream)) != EOF &
我创建了一个大小为7的动态分配的列表数组,它工作得很好,可以将元素推送到数组中的每个列表中。但是,当我试图使用realloc将数组调整到10大小时,这似乎没有产生任何错误,但是当我试图将元素推到列表中时,我得到了Segmentation fault错误。
代码:
#include <iostream>
#include <list>
int main()
{
std::list<int> *slots = new std::list<int>[7];
for (int i = 0; i < 7; ++i)
{
这个程序应该提示输入单词中的字母数(稍后输入),这样它就知道要分配多少空间。它似乎工作得很好,但是如果你分配的内存少于存储单词所需的内存,这似乎无关紧要。这是一个我必须纠正的错误,还是因为这是指向char (char *)的指针的工作方式?
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned int a = 0;
printf("Enter the size of the word(0=exit) :");
scanf("%d",&a);
if(a==0){
因此,目前我正在将一个XMLParser写到一个树中,它运行良好,但问题是它使用了太多的内存,当我试图使用一个4GB的XML文件运行它时,由于缺少内存,它无法工作。
因此im所做的是首先将XML文件转换为char*,然后通过它进行解析,并使用malloc为每个节点结构分配内存。
确切地说,我应该什么时候释放这些节点?我应该这么做吗?我只是不明白什么时候我才能把东西放出来。我得到的是瓦兰的错误
==3002== HEAP SUMMARY:
==3002== in use at exit: 8,995 bytes in 423 blocks
==3002== total heap us
我试图在C中读取stdin中的一行,同时使用下面的代码片段动态地为字符串分配内存。问题是,当我运行这段代码时,调用类似于strlen(msg)的代码会在valgrinds输出中生成一个Conditional jump or move depends on uninitialised value(s)。
我不知道如何克服这个问题,因为如果动态地分配它,我就不能正确地初始化它。我花了很长时间在这件事上,似乎想不出.任何帮助都将不胜感激。
char* msg = NULL;
int c;
// set initial size for dynamic allocation
msg = malloc
大家好,我有一个关于这个代码的问题。我必须返回一个没有重复的由矩阵元素组成的向量(矩阵应该用冒号读取)。输出是正确的,但valgrind提示我内存中存在问题。我试图动态构建向量,通过realloc添加一个新元素。非常感谢。 #include<stdio.h>
#include<stdlib.h>
void printa_matrice(int nc, int nr , int ** mat)
{
int i, j;
for (i=0; i<nr; i++){
for(j=0; j<nc ; j++){
我有一段可以演示的代码:
#include <cstdlib>
#include <cstdio>
int main() {
int ** matrix = NULL;
int c = 1, input = 0;
printf("Enter first row of the matrix:\n");
while (!feof(stdin)) {
input = fgetc(stdin);
matrix = (int**) realloc(matrix, 1 * sizeof (int*
我有一个动态调整大小的字符串数组(我不知道编译时字符串的大小),它总是给我一个分段错误。该数组包含在一个名为hm的结构中,它有一个字符串数组和一个值数组。这部分代码仅用于在结构中添加新字符串时正确调整字符串数组的大小。我对C和结构比较陌生,所以如果有更好的方法来实现它,我会很乐意听到的。我已经尝试过寻找这种情况,大多数似乎是使用sizeof(char)而不是sizeof(char*)的外部数组有问题,但当我更改时,问题仍然发生。 //problematic part of the function
char** t = (char**)realloc(hm->keys, hm->
当我运行我的C程序时,我正在经历一个巨大的内存使用。它使用的内存比预期的要多。即使是操作系统有时也会因为占用大量内存而不得不终止进程(而且我的机器中有20 in的RAM )。我试着运行valgrind,看看是否有一些关于内存使用情况的线索。在英勇输出中,我可以看到一个可能指向这个问题的警告:
==69541== Warning: set address range perms: large range [0x76eb040, 0x2cb27240) (undefined)
但是,我不知道如何分配这么大范围的内存。
希望这不是一个太笼统的问题。我试图提供最低限度的细节来解决这个问题,但如果需要,
在中,解释瓦兰的Memcheck错误报告,在4.2.1节中有一个这样的例子。非法读/写错误
Invalid read of size 4
at 0x40F6BBCC: (within /usr/lib/libpng.so.2.1.0.9)
by 0x40F6B804: (within /usr/lib/libpng.so.2.1.0.9)
by 0x40B07FF4: read_png_image(QImageIO *) (kernel/qpngio.cpp:326)
by 0x40AC751B: QImageIO::read() (kernel/qimage.cpp:
我尝试在Python C扩展中调试内存崩溃,并尝试在valgrind下运行脚本。我发现valgrind输出中有太多的“噪音”,即使我运行了简单的命令:
valgrind python -c ""
Valgrind输出充满重复信息,如下所示:
==12317== Invalid read of size 4
==12317== at 0x409CF59: PyObject_Free (in /usr/lib/libpython2.5.so.1.0)
==12317== by 0x405C7C7: PyGrammar_RemoveAccelerators (in /us