Tag: 指针

冒泡排序中的分段错误

试图编写一个冒泡排序算法,对任何数据类型进行排序,其工作方式类似于C中stdlib中的qsort。 这是我编写的代码,编译它给我一个“分段错误”错误尝试使用-g编译gdb调试,这让错误更多 as: In function `testcmp’: (.text+0x21a): multiple definition of `testcmp’ /tmp/cc9ULHuO.o:new.c:(.text+0x12d): first defined here as: In function `_fini’: (.fini+0x0): multiple definition of `_fini’ /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crti.o(.debug_info): relocation 0 has invalid symbol index 7 /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crti.o(.debug_info): relocation 1 has invalid symbol index 8 /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crti.o(.debug_info): relocation 2 has invalid symbol index 9 /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crti.o(.debug_ranges): relocation 0 […]

使用循环将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); } […]

将三重指针传递给函数然后mallocing一个二维数组

得到分段错误并且不明白为什么,必须传递三重指针才能进行分配,所以无法改变… 这是function void alloc2d(double*** a, int m, int n) { int i, j; **a = malloc(sizeof(double *) * m); a[0] = malloc(sizeof(double) * n * m); for(i = 0; i < m; i++) a[i] = (*a + n * i); } 这是函数的调用…… double** m; alloc2d(&m, 5, 10); double count = 0.0; for (int i = […]

读写矩阵

我写了这段代码来输入r * c矩阵 r – >行c – >列 当r c时无法产生正确的输出。 例: r = 6,c = 2 输入:1 2 3 4 5 6 7 8 9 10 11 12 输出: 1 2 11 12 5 6 11 12 11 12 11 12 请告诉我我哪里出错了。 我不想使用恒定大小的数组。 #include void scanmatrix(int* a[],int r,int c) { int i,j; for(i=0;i<r;i++) { for(j=0;j<c;j++) […]

如何从链表中弹出元素?

我正在尝试使用各种推送和弹出function来学习链表,但我无法从链表中的尾部弹出元素。 任何人都可以帮我解决popBackfunction吗? 我尝试过类似的东西: typedef struct { float val; }data; typedef struct nodePtr { struct nodePtr *next; data *d; }node; typedef struct { node *head; node *tail; }linkList; linkList* createlinkList() { linkList *ll = (linkList*)malloc(sizeof(linkList)); ll->head = NULL; ll->tail = NULL; return ll; } node* createNode(data *d) { node *nd = (node*)malloc(sizeof(node)); nd-> d = d; […]

使用calloc和数组并返回指针的麻烦

作为参考,这是我的任务的第二部分: int* generateFibonacci(int size); 此函数将输入一个称为size的整数作为输入。 size变量中包含的值将表示要放入数组的Fibonacci序列中的数量。 该函数将使用calloc创建此大小的数组,然后使用Fibonacci序列中的size编号填充数组,从1和1 。 当数组完成时,函数将返回指向它的指针。 当我在第8行中收到错误warning: assignment makes and integer from pointer without a cast时,我遇到了麻烦:在warning: assignment makes and integer from pointer without a cast 。 我得到的另一个错误是在第19行“ warning: return makes pointer from integer without a cast ”。 所以我的问题是,我怎么想设置calloc来使用一个大小来自用户的数组,然后返回一个指向它的指针? #include #include int* generateFibonacci(int size) { int i, array[size]; array[size]=(int*)calloc(size, sizeof(int)); array[0]=0; array[1]=1; for(i […]

使用C中的指针进行2D数组操作

假设我有一个操作2D数组的函数,该数组从主函数接收指向2D数组的指针作为其参数。 现在,我想修改(假设每个元素添加10个)2D数组的每个元素。 我有兴趣知道使用给我的单个指针遍历2D数组并返回新修改的数组的指针。 粗糙的结构 假设指针a包含2D数组的初始地址。 int add_10(int *a) { int i, j, b[M][N] = {0}; for(i = 0; i < M; i++) for(j = 0; j < N; j++) b[i][j] = 10 + a[i][j]; }

如何在C中初始化指向指针的指针

所以我得到了这个包含2个字段的struct Node : DataP data , void * key , DataP只是void*的typedef 。 我创建了一个双指针Node **table ,使其像2D数组一样。 我无法想象如何malloc它,我希望这个双指针充当2D数组,其中2为行数,x为cols数。 我试过table = (Node**)malloc(sizeof(Node*)*2); 但这是对的吗? 我该如何从这里继续?

C尝试区分通用指针

我试着打电话, g_io_scheduler_push_job(job_func, &param, NULL, G_PRIORITY_HIGH, generator_cancellable); 在我的C/gtk+应用程序中,在另一个线程中运行job_func()然后是主程序。 但是当我调用这个函数时有段错误,并且调试器说:** userdata尝试区分通用指针** job_func()代码是, gboolean job_func(GIOSchedulerJob *job, GCancellable *cancellable, gpointer user_data) { JobParam* job_param = (JobParam*)user_data; build(NULL, job_param->mw); return TRUE; } JobParam , typedef struct _JobParam { GtkWidget* widget; MainWin* mw; }JobParam; MainWin , typedef struct _MainWin { GtkWindow parent; GtkWidget* scroll; GtkWidget* box; GtkUIManager *uimanager; } MainWin; 并build […]