Tag: 数组

初始化大型双数组的问题

来自新C程序员的愚蠢问题……我在以下代码中遇到了分段错误: #include int main(void) { double YRaw[4000000]={0}; return 0; } 使用GDB,我收到以下评论: Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: KERN_PROTECTION_FAILURE at address: 0x00007fff5dd7b148 0x0000000100000f24 in main () at talk2me.c:18 18 double YRaw[4000000]={0}; // set YRaw[memdepth] so index is 0 to memdepth-1 如果我将YRawarrays的大小减少10倍,那么一切都有效。我在系统中有6GB的RAM,那么为什么我会收到错误? 谢谢,Gkk

c ++:本地数组定义与malloc调用

这有什么区别: somefunction() { … char *output; output = (char *) malloc((len * 2) + 1); … } 还有这个: somefunction() { … char output[(len * 2) + 1]; … } 什么时候比另一个更合适? 谢谢大家的回答。 这是一个总结: 恩。 1是堆分配 恩。 2是堆栈分配 堆栈有一个大小限制,用于较小的分配 你必须释放堆分配,否则它会泄漏 一旦函数退出,就无法访​​问堆栈分配 在您释放堆分配(或应用程序结束)之前,可以访问堆分配 VLA不是标准C ++的一部分 更正欢迎。 这里有一些关于堆与堆栈之间差异的解释: 堆栈和堆的内容和位置是什么?

C中二进制搜索的第一次和最后一次出现

我试图理解如何修改二进制搜索,它适用于第一次和最后一次出现,当然我可以在网上找到一些代码,但我试图深入理解,这里是一些基本的非递归二进制搜索我发现: int BinarySearch(int *array, int number_of_elements, int key) { int low = 0, high = number_of_elements-1, mid; while(low <= high) { mid = (low + high)/2; if(array[mid] key) { high = mid-1; } } return -1; } 我需要做哪些修改以及它们背后的逻辑是什么? 编辑:我希望它高效而不是线性完成。

如何将3D数组的字符传递给函数

我有一个chars table [] [] []的3D数组,我想将它传递给void函数,以便它可以对它进行更改。 我怎样才能做到这一点? void make(char minor[][][]); ….. char greater[20][30][50]; make(greater); 我猜这不会奏效。 编辑:与此相关的另一个问题:假设我想创建一个复制函数将字符串复制到数组中 – 我应该如何调用函数中的strcpy? void copy(char (*minor)[][]) { char m[50] = “asdasdasd”; strcpy(minor[][],m); }

gcc不再允许空数组吗?

我有gcc 4.7.2-3,我得到以下错误: main.c:5:6:错误:’fname’中缺少数组大小 main.c:6:6:错误:’lname’中缺少数组大小 初始化时: int fname[]; int lname[]; 使用更高版本的gcc不再可能吗? 因为我确定我以前用过这个…… 编辑:我说我记得这个的原因是因为我甚至在这里看到它: http : //h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V40F_HTML/AQTLTBTE/DOCU_046.HTM

在C中将hex转换为字符串?

您好我正在使用digi动态c。 我试图将其转换为字符串 char readingreg[4]; readingreg[0] = 4a; readingreg[1] = aa; readingreg[2] = aa; readingreg[3] = a0; 目前,当我做printf语句时,它必须是这样的: printf(“This is element 0: %x\n”, readingreg[0]); 但我想在字符串中这样,所以我可以像这样使用printf语句 printf(“This is element 0: %s\n”, readingreg[0]); 我本质上是通过TCP / IP端口发送readingreg数组,我需要将它作为字符串。 我似乎无法将其转换为字符串。 谢谢你的帮助。 此外,如果有人可以告诉我如何一次完成每个元素而不是整个数组,那将是很好的,因为只有4个元素。

为什么gcc允许char数组初始化,字符串文字比数组大?

int main() { char a[7] = “Network”; return 0; } C中的字符串文字在内部以nul字符终止。 因此,上面的代码应该给出一个编译错误,因为字符串文字Network的实际长度是8,它不能适合char[7]数组。 但是,Ubuntu上的gcc (甚至是-Wall )编译此代码时没有任何错误或警告。 为什么gcc允许这样做而不将其标记为编译错误? 当char数组大小小于字符串文字时,gcc仅发出警告(仍然没有错误!)。 例如,它警告: char a[6] = “Network”; [相关] Visual C ++ 2012为char a[7]提供了编译错误: 1>d:\main.cpp(3): error C2117: ‘a’ : array bounds overflow 1> d:\main.cpp(3) : see declaration of ‘a’

使用qsort同时对两个数组进行排序?

我可以对单词指针数组进行排序,使它们按字母顺序排序,问题是我需要对整数数组进行排序(使用特定单词的次数),以便整数与它们的位置相同各自的话: 我的代码: for (i = 0; i < numWords; i++) { // prints out the words and their frequency respectively printf("%s – %d\n", dictionary[i], frequency[i]); } //sorts the dictionary so that the words are 'alphabetical' qsort(dictionary, numWords, sizeof(char *), rstrcmp); printf("\nafter qsort\n"); //checkmark for (i = 0; i < numWords; i++) { // prints the […]

像一维数组一样初始化二维数组

任何人都可以解释这些值将如何存储在这个数组中: int a[2][3] = {1,2,3,4,5} 使用2Darrays,但将其分配为1Darrays。

c malloc数组指针在cython中返回

如何有效地将cython中的malloc数组指针(或numpy数组指针)返回到python3。 只要我不返回数组指针,cython代码就可以正常工作 我想要: def double complex* randn_zig(int n): … r = malloc(n*n*sizeof(double complex)) … return r c11(gcc 11)等价物是: double complex* randn_zig(int n){ r = malloc(n*n*sizeof(double complex)) return r } 我试过 randn_zig(int n): 和randn_zig( r, int n): 到目前为止,其他排列没有成功。 c和cython代码版本的速度是Numby / pylab randn版本的5倍,如果我能找到一种方法来返回指向大型10 ^ 6到10 ^ 10双复数组的指针。