Tag: malloc

程序不会在堆溢出时崩溃

我写了以下程序: #include #include #include void main(int argc, char *argv[]){ char *input; input = (char*)malloc(16); printf(“input is : %s\n”, input); } 当我这样运行时: ./test `python -c ‘print “A”*5000’` 它没有崩溃。 它打印数据。 当我在printf之后使用free(input) ,它会崩溃。 为什么会这样?

C中Quick Union实现中的分段错误(核心转储)

#include #include int *id,N; main() { FILE* file=fopen(“a.txt”,”r”); int i,p,q,c; fscanf(file,”%d”,&N); id=(int *)malloc(N*sizeof(int)); for(i=0;i<N;i++) *(id+i)=i; while(!feof(file)) { fscanf(file,"%d %d",&p,&q); if(!connected(p,q)) unn(p,q); } fclose(file); c=1; while(c==1) { scanf("%d %d",&p,&q); printf("%d\nYes(1) or No(0) ",connected(p,q)); scanf("%d",&c); } } connected(int p,int q) { return((root(p))==(root(q))); } unn(int p,int q) { int j=root(q); int i=root(p); *(id+j)=i; } root(int i) { while(i!=(*(id+i))) […]

malloc结构指针数组与结构数组

有什么区别 struct mystruct *ptr = (struct test *)malloc(n*sizeof(struct test)); 和 struct mystruct **ptr = (struct test *)malloc(n*sizeof(struct test *)); 他们都工作正常,我只是好奇两者之间的实际差异。 第一个是否分配了一个结构数组,而第二个是结构指针数组? 另一种方式? 另外,哪一个占用内存较小?

C链接列表valgrind无效读取大小

我的链接列表和valgrind输出有问题。 这里没有进一步的说明是我的链表: typedef struct Map map; struct Map { void *address; double free_time; map* next; }*map_list; 使用虚拟头节点创建列表。 正如您所看到的,struct包含一个地址和一个空闲时间,我尝试将它们关联起来。 在find_and_free函数中,我使用时间搜索此列表,如果此时间小于列表中存储的时间,则取消分配已保存的地址。 然后我也解除了列表节点的释放。 这是用于查找任何小于我传递的空闲时间的函数。 如果它更小,我释放存储到列表中的地址,然后调用delete_map_node函数也解除分配列表的节点。 void find_and_free_address(map *root, double mtime) { map *current = root->next; assert(current); while(current) { if(current->free_time free_time); printf(“The map contains an address that is time to free\n”); //free_allocated_address(&current->address); free(current->address); delete_map_node(map_list, current->free_time); //delete(map_list,current->free_time); //return next; } […]

进入没有malloc的char * str,没有segfault?

我刚刚使用Cygwin的gcc编译了这个C程序: #include void main (){ char *str; gets(str); printf(“%s”,str); } 抛弃gets的弃用已经过时了,这应该打破,因为我没有为str分配任何内存,但它甚至可以用很长的输入。 例如,如果我设置了char str [16],它会在超过分配的长度后中断几个字符。 为什么我没有得到分段错误?

这个malloc应该不起作用

这是我的代码。 int main() { char *s; int i = 0; printf(“%lu \n”, sizeof(s)); s = malloc(sizeof(char) * 2); printf(“%lu \n”, sizeof(s)); /*Why is this working?*/ while (i <= 5) { s[i] = 'l'; i++; } printf("%s \n", s); printf("%lu \n", sizeof(char)); printf("%lu \n", sizeof(s[0])); } 在我看来,这应该是段错误,因为我试图写的比我分配的更多。 这为何有效?

每次运行函数时都要进行Malloc’ing并重置数组

struct variables { unsigned int counter; char *bra; unsigned int maxb; int *findtheking; unsigned int numoright; }; int getlen = 0; // I give getlen a value in another function int solo = 0; mat.bra = (char*)malloc(sizeof(char)*getlen); mat.bra = ‘\0’; struct variables pal = { 0, ‘\0’, 0, 0, 0 }; struct variables mat = […]

如何动态(使用malloc或calloc)分配内存?

可能重复: 确定c中动态分配的内存的大小 关于malloc和sizeof的新手问题 如何从C中的指针获取数组的大小? Malloc – >分配了多少内存? int **arrofptr; arrofptr = (int **)malloc(sizeof(int *) * 2); arrofptr[0] = (int *)malloc(sizeof(int)*6144); arrofptr[1] = (int *)malloc(sizeof(int)*4800); 现在我必须知道在arrofptr,arrofptr [0],arrofptr [1]中分配了多少字节? 有什么方法可以知道尺寸吗? 如果我们打印 sizeof(arrofptr); sizeof(arrofptr[0]); sizeof(arrofptr[1]); 那么它将打印4

strcat和malloc

目前,我需要将strcat()2个字符串放在一起。 问题是,我必须这样做3次。 (共6个连接)。 程序是这样,使用循环重复3次: Malloc一个字符串 使用for循环,调用strcat 2次 释放字符串 问题是即使在我释放字符串和重新malloc之后,strcat似乎仍然在连接前一个字符串。 例如: AA BB CC DD EE FF的预期输出 strcat字符串1:AABB strcat string 2:CCDD strcat字符串3:EEFF 实际产量: strcat字符串1:AABB strcat字符串2:AABBCCDD strcat string 3:AABBCCDDEEFF 有谁知道它为什么这样做? void sendInitialHand(card * deck) { char * stringToSend; playerNode * curNode; curNode = housePlayers.head; for (int i=0; i<housePlayers.playerCount; i++) { stringToSend = malloc(sizeof(char)*6); for (int j=0; jplayerFD) […]

释放全局变量

假设我有一个包含大型结构的全局变量: typedef struct { char Big[1024] } LARGE; static LARGE x; void main() { free(x); } 当我不再需要它时,我可以安全地从main调用free(x)吗?