Tag: calloc

2d数组,在C中使用calloc

我正在尝试为字符存储行创建一个二维字符串数组。 例如: lines[0]=”Hello”; lines[1]=”Your Back”; lines[2]=”Bye”; 因为线必须是动态的,所以我不知道我需要多少行。 这是我的代码: int i; char **lines= (char**) calloc(size, sizeof(char*)); for ( i = 0; i < size; i++ ){ lines[i] = (char*) calloc(200, sizeof(char)); } for ( i = 0; i < size; i++ ){ free(lines[i]); } free(lines); 我知道每条线都不能超过200个字符。 我一直收到错误,如“错误C2059:语法错误:’为’”等等。 我做错了什么想法?

二维数组动态内存分配崩溃

可能重复: 如何在C中正确设置,访问和释放多维数组? 我正在尝试使用calloc为2D数组动态分配内存。 列固定为2,因此它只是动态的行。 这是我一直在尝试的: unsigned int **pts, rows; int main() { //some code pts = (unsigned int **)calloc(2*rows, sizeof (unsigned int **)); } //The code to access the array : for(k=1;k<=i;k++) { printf("\nX%d=",k); scanf("%d",&pts[k][0]); printf("\nY%d=",k); scanf("%d",&pts[k][1]); } 但问题是,在访问arrays时,程序崩溃了。 我正在使用Eclipse和MinGW GCC。 如果我需要在这里提供更多数据或者让我知道如何处理这个问题,请告诉我,因为这是我的第一篇文章。

是否有必要对malloc和calloc进行类型转换

可能重复: 我是否施放了malloc的结果? 我在Google上搜索找出malloc和calloc的类型转换的原因。 但是,我只发现malloc的类型转换是没有必要的,因为它返回void指针但是, calloc怎么样。 这也是calloc的原因??? 现在,如果我们回到第一点,关于malloc和calloc的返回值。 然后,我发现两者都返回分配的空格 。 所以,我在这里有点困惑。 所以,我的问题是 malloc和calloc的返回值是多少? 是否有必要输入malloc和calloc 。 为什么?

malloc和calloc之间的使用差异

gcc 4.5.1 c89 我已经编写了这个源代码,以便我更好地理解malloc和calloc。 我理解,但只是有几个问题。 dev = malloc(number * sizeof *devices); 等于这个calloc。 我并不担心清理内存。 dev = calloc(number, sizeof *devices); 与在while循环中执行5次相比,这究竟是什么呢? dev = malloc(sizeof *devices); 我想第一个和第二个是创建一个指向5结构设备的指针。 第三个是创建一个指向结构设备的指针? 我的程序说明了使用valgrind编译和运行的3种不同方法–leak-check = full。 非常感谢任何建议。 #include #include struct Devices { #define MAX_NAME_SIZE 80 size_t id; char name[MAX_NAME_SIZE]; }; struct Devices* create_device(struct Devices *dev); void destroy_device(struct Devices *dev); int main(void) { size_t […]

传递给free()的指针是否必须指向内存块的开头,还是指向内部?

问题在于标题……我搜索但找不到任何东西。 编辑: 我真的没有必要解释这个问题,但是因为人们认为我说的话毫无意义(我问的是错误的问题),这就是问题所在: 由于人们似乎对所有问题的“根”原因非常感兴趣而不是实际提出的问题(因为这显然有助于事情得到更好的解决,让我们看看它是否确实如此),这就是问题所在: 我正在尝试基于NTDLL.dll创建一个D运行时库,这样我就可以将该库用于Win32子系统以外的子系统。 所以这迫使我只与NTDLL.dll链接。 是的,我知道这些function是“无证件”的,并且随时都可能发生变化(即使我打赌一百美元, wcstombs在20年后仍会做同样的事情,如果它仍然存在的话)。 是的,我知道人们(尤其是微软)不喜欢开发人员链接到该库,并且我可能会因此而受到批评。 是的,上述两点意味着在Win32子系统之前运行的程序如chkdsk和碎片整理程序甚至不应该首先创建,因为它几乎不可能与kernel32.dll或msvcrt.dll之类的东西链接。仍然有NT本地可执行文件,所以我们开发人员应该假装这些阶段是永远不在我们的范围之内。 但不 ,我怀疑这里的任何人都希望我粘贴几千行代码并帮助我浏览它们并试图弄清楚为什么未修改的内存分配被我正在修改的源代码拒绝。 所以这就是为什么我问起一个不同于“根”原因的问题,即使这被认为是社区的最佳实践。 如果事情仍然没有意义,请随时在下面发表评论! 🙂 编辑2: 经过大约8个小时的调试,我终于找到了问题: 事实certificate,如果给它的指针是NULL , RtlReAllocateHeap()不会像RtlAllocateHeap() 那样自动工作。

Calloc结构与指针在C中

我知道要使用的calloc请求内存,在所有位上写入0然后返回指向它的指针。 我的问题是:如果我使用包含指针的结构的calloc,那些指针会有NULL值还是我必须将它们设置为指向NULL? struct a{ char * name; void * p; }* A; 所以基本上,在我使用带有struct a的calloc之后,name和p会指向NULL吗? 谢谢!

为什么calloc接受两个参数而malloc只有一个?

IMO就足够了,为什么calloc需要将它分成两个参数?

使用结构将sizeof应用于不完整类型无效

我有一个结构,我把所有关于球员的信息。 那是我的结构: struct player{ int startingCapital; int currentCapital; int startingPosition; int currentPosition; int activePlayer; int canPlay; }; 这是我的主要内容: #include #include #include “header.h” int main(int argc, char *argv[]) { int s,i,numOfPlayers; struct player *players; printf(“Give the number of players: \n”); scanf(“%d”,&numOfPlayers); players = (struct player *)calloc(numOfPlayers,sizeof(struct player)); system(“PAUSE”); return 0; } 我要求用户给出玩家数量,然后我尝试分配所需的内存。 但我得到这个编译错误,我无法弄清楚: invalid application of […]

正确使用realloc()

从man realloc:realloc()函数返回一个指向新分配的内存的指针,该内存适用于任何类型的变量, 可能与ptr不同,如果请求失败,则返回NULL。 所以在这段代码中: ptr = (int *) malloc(sizeof(int)); ptr1 = (int *) realloc(ptr, count * sizeof(int)); if(ptr1 == NULL){ //reallocated pointer ptr1 printf(“Exiting!!\n”); free(ptr); exit(0); }else{ free(ptr); //to deallocate the previous memory block pointed by ptr so as not to leave orphaned blocks of memory when ptr=ptr1 executes and ptr moves on to another […]