Tag: c

在C中获取两个数组的差异的有效方法是什么?

样本输入 Array_1 [] = { 10, 20, 30, 40, 50 }; Array_2 [] = { 30, 40, 50, 60, 70 }; 样本输出 Array_1_Extras [] = { 10, 20 }; Array_2_Extras [] = { 60, 70 }; 描述 输入数组未排序。 输入数组长度 – 10K。 输入数组值范围为0 – 4095。 不应修改输入数组顺序和值。 输出数组可以按任何顺序排列。 输出数组中不需要重复项。 我需要一些时间有效的逻辑来实现这个程序。 提前致谢。

将字符串数组传递给C中的函数

我刚刚学习C,有人可以解释为什么下面的代码在打印数组的第一个元素后会产生分段错误吗? 工作代码会是什么样的? #include #include #include #define ELEMENTS 8 void make(char ***array) { *array = malloc(ELEMENTS * sizeof(char *)); (*array)[0] = “test0”; (*array)[1] = “test1”; (*array)[2] = “test2”; (*array)[3] = “test3”; (*array)[4] = “test4”; (*array)[5] = “test5”; (*array)[6] = “test6”; (*array)[7] = “test7”; (*array)[8] = “test8”; } int main(int argc, char **argv) { char **array; make(&array); […]

将图像放置在固定布局GTK2中

我有一个试图执行以下操作的应用程序: 创建一个GTK2顶级主窗口 在主窗口中添加固定框架,以便对窗口小部件进行绝对定位 创建一个GtkImages矩阵,用于显示动画GIFS和静态JPEGS 在启动时,从列表中随机选取的静态JPEGS将填充矩阵 当事件发生时,矩阵将填充动画GIFS 当动画结束时,可能会在矩阵中再次显示不同的JPEGS 仅当两个或多个随机选择的JPEGS放置在矩阵的一行中时,才会发生运行时错误。 以下是此类运行时错误的示例: (wrong:3909): Gtk-WARNING **: Can’t set a parent on widget which has a parent 如果该行的每个图像都是唯一的,则不会发生运行时错误。 代码片段和运行时输出如下: /* * Compile me with: * gcc -Wall -o wrong wrong.c $(pkg-config –cflags –libs gtk+-2.0 gmodule-2.0) */ /* header includes */ /**** prototypes ****/ /********************/ typedef struct { unsigned int pixel_width, […]

strdup()导致内存泄漏?

我已经实现了一个返回字符串的函数。 它将整数作为参数( age ),并返回格式化的字符串。 一切都运作良好,除了我有一些疯狂的内存泄漏。 我知道strdup()是导致这种情况的原因,但我试图研究一些修复无济于事。 我的代码是: const char * returnName(int age) { char string[30]; sprintf( string, “You are %d years old”, age); return strdup(string); } Valgrind的输出是: ==15414== LEAK SUMMARY: ==15414== definitely lost: 6,192 bytes in 516 blocks ==15414== indirectly lost: 0 bytes in 0 blocks ==15414== possibly lost: 0 bytes in 0 blocks ==15414== […]

将字节数组转换为整数而不循环的方法?

(我已经看到了这些问题( 在C 中将字节 转换为Int / uint并将字节数组转换为Int24 )但它们看起来比我想做的更复杂,所以我想我会问。) 我在Arduino / Wiring中做了一些LED矩阵编程。 由于这里可能不相关的原因,我有一个表示LED行的“位状态”的字节数组,我用它来缓冲其他操作的结果。 要实际设置LED(我使用的是Maxim 7219芯片),我需要从字节数组中导出一个整数。 使用Arduino / Wiring bitWrite方法,我的下面的一个简单的例子程序工作,但我想知道是否有一个比循环更快的C方法。 byte dog[8] = {0,0,1,1,1,1,1,0}; byte cat; for (int i = 0; i < 8; i++){ bitWrite(cat, i, dog[7-i]); }

从OpenMP到MPI

我只是想知道如何将以下openMP程序转换为MPI程序 #include #define CHUNKSIZE 100 #define N 1000 int main (int argc, char *argv[]) { int i, chunk; float a[N], b[N], c[N]; /* Some initializations */ for (i=0; i < N; i++) a[i] = b[i] = i * 1.0; chunk = CHUNKSIZE; #pragma omp parallel shared(a,b,c,chunk) private(i) { #pragma omp for schedule(dynamic,chunk) nowait for (i=0; […]

Malloc语句给出分段错误11

对于一个项目我正在学习在c中使用malloc / realloc,但我无法弄清楚为什么这段代码给我一个seg错误! #include #include #include #include typedef struct word_data word_data_t; typedef struct data data_t; typedef struct index_data index_data_t; struct word_data { int docunumber; int freq; }; struct data { char *word; int total_docs; word_data_t *data; }; struct index_data { data_t *index_data_array; }; /* Inside a function called from main */ index_data_t *index_data=NULL; index_data->index_data_array = […]

C双重不按预期工作

我正在写一些我需要将29除以10的地方。但是当我这样做并将其存储在一个double中时,它输出2.0000而不是2.9。 有人可以解释为什么会发生这种情况以及如何解决这个问题? double a = 29/10; output: 2.0000

使用循环将C值添加到链接列表

我有一个链接列表,我正在尝试为其添加值。 但是我必须错误地设置我的指针,或者内存分配有问题。 我想将令牌添加到列表中,但每次有新的循环时数据都会重叠。 例如: 第一次: repl> a a 第二次: repl> b b b 注意a是如何消失的,我想在添加新值时保留先前的值。 到目前为止,这是我的代码: struct node { int val; struct node *next; }; struct node *head = NULL; struct node *cur = NULL; struct node* create_list (int value) { struct node *ptr = (struct node*) malloc(sizeof (struct node)); if (NULL == ptr) return NULL; […]

为什么在这个prog中使用指针指针?

以下程序显示了如何在C程序中构建二叉树。 它使用动态内存分配,指针和递归。 二叉树是一种非常有用的数据结构,因为它允许在排序列表中进行有效的插入,搜索和删除。 因此,树本质上是递归定义的结构,递归编程是处理它的自然而有效的方式。 tree empty node left-branch right-branch left-branch tree right-branch tree 这是代码: #include #include struct tree_el { int val; struct tree_el * right, * left; }; typedef struct tree_el node; void insert(node ** tree, node * item) { if(!(*tree)) { *tree = item; return; } if(item->valval) insert(&(*tree)->left, item); else if(item->val>(*tree)->val) insert(&(*tree)->right, item); } […]