Articles of 指针

OpenCL的。 奇怪的数组寻址/指针错误

我有这个简单的内核进行testing。 __kernel void nfa(__global const int *a, __global int *output) { output[0] = a[0]; } 注意:这是在CPU上运行,内存可能在主机上。 它导致这个错误。 * glibc检测到 ./program:malloc():smallbin双链表损坏:0x0000000000a4a540 * * 我怀疑这是破坏程序的一部分,因为它正在访问主机内存。 但据我所知,所有内存分配正确。 它在堆栈上,但在运行时停留在范围内。 但是,如果我这样做: __kernel void nfa(__global const int *a, __global int *output) { a = a; output[0] = a[0]; } 这导致答案2,这是正确的,因为a是一个数组[2,4,8]; 对自己的分配解决了这个问题… 这也很好,导致4。 __kernel void nfa(__global const int *a, __global int *output) […]

ether_ntoa指针投射问题

我正在尝试使用ether_ntoa打印MAC地址。 当我尝试做 printf("MAC (src): %s\n",ether_ntoa((struct ether_addr *)&eheader->ether_shost)); 我遇到了分段错误,所以我想出了两种不同的方法: 这是代码nº1: struct ether_header *eheader; char *p; … p = ether_ntoa(struct ether_addr *) &eheader->ether_shost); printf("-MAC (src): %s\n",p); 我得到的警告是: 赋值使得整型指针没有强制转换 所以我做演员和… 这是代码nº2: struct ether_header *eheader; char *p; … p = (char *) ether_ntoa((struct ether_addr *) &eheader->ether_shost); printf("-MAC (src): %s\n",p); 我得到的警告是: 从不同大小的整数转换为指针 如果你看看手册页,ether_ntoa是这样定义的,返回一个char * : extern char *ether_ntoa (__const struct […]

如何在Linux系统上实现NULL指针?

它是否映射到内存中的零页?

通过共享内存IPC在进程之间共享指针

我试图通过共享内存共享父和分叉子之间定义类的指针。 所以在父母的主要我创build指针 mydata *p; Reader::GetInstance()->Read(p, i+1); pid = fork(); if (pid == -1){ cout << "error on fork"<<endl; }else if (pid == 0){ cout << "i will fork now" <<endl; const char * path = "./mydatamanager"; execl (path, "-", (char *)0); break; }else { writer(shmid, p); } 作家包含这一点 void writer(int shmid , mydata * p) […]

共享父subprocess之间的指针

我在Linux上使用函数Fork()在主进程中创build了一个C程序来创build另一个subprocess。 我的目标是在主进程中创build一个指针(int *),并在subprocess内改变它,在subprocess被终止后,我们回到主进程并显示指针的值(int *)。 这就是我的程序的样子: #include <stdio.h> #include <stdlib.h> #include <sys/wait.h> int main (){ int i, *x, f; *x = 0; printf("address from father: %p pid: %d\n", x, getpid()); f = fork(); if (f==0) { *x = 5;//change the value of the pointer inside the child printf("address from son: %p ppid: %d\n", x, getppid()); exit(0); […]

打印字符数组垃圾

#include<sys/stat.h> #include<stdio.h> #include<fcntl.h> #include<sys/types.h> int main() { int n,i=0; int f1,f2; char c,strin[100]; f1=open("data",O_RDWR|O_CREAT|O_TRUNC); while((c=getchar())!='\n') { strin[i++]=c; } strin[i]='\0'; write(f1,strin,i); close(f1); f2=open("data",O_RDONLY); read(f2,strin,0); printf("\n%s\n",strin); close(f2); return 0; } 这个代码在一些机器上工作得很好,而在其他机器上打印出垃圾,如何使它在所有机器上正常运行?

C sockaddr函数调用sendto?

我目前正在为学校设置一个UDP套接字,但我不知道如何正确地将sockaddr作为参数发送到函数中。 SendData的input参数的定义方式与sendto函数中的相同。 void SendData(int fileDescriptor, const struct sockaddr_in *destAddrUdp, unsigned char buffer[MAXMSG]) { /* crc */ int strlength = strlen(buffer); unsigned char SCRC = CRC(buffer, strlength-1); buffer[strlength-1] = SCRC; buffer[strlength] = '\0'; /* send */ if (sendto(fileDescriptor, buffer, strlen(buffer), 0, (struct sockaddr*) &destAddrUdp,sizeof(destAddrUdp)) < 0) { fprintf(stderr, "Could not send data\n"); } } ` 当从main调用下面的代码时,它将起作用,但是当从SendData调用sendto时,返回值是-1。 […]

运行包含'无效'的FORTRAN代码时出现Linux错误

我几天前开始学习FORTRAN,当试图“取消”一个指针时,我偶然发现了一个错误。 该代码编译没有任何缺陷,但我这是它inputvariables后显示。 我也知道这个问题是由'nullify'命令引起的,因为如果我评论这行,程序运行时没有任何错误。 码: program demo1 implicit none TYPE :: Neuron real :: val = 0 real :: w1 = 1, w2 = 1 TYPE(Neuron), pointer :: vertex1, vertex2 end TYPE Neuron TYPE :: container TYPE(Neuron), pointer :: obj end TYPE container integer :: i=0, n_inputs TYPE(Neuron), target :: output_vertex TYPE(Neuron), pointer :: temp TYPE(container), […]

编译问题在linux上

所以我在linux(Ubuntu)中使用emacs文本编辑器编写了下面的代码,它基本上应该将传入的分隔符中的string分开。 当我运行它segfaulted我运行它通过GDB,它给了我一个错误在strcpy(我没有调用),但可能在sprintf隐式完成。 我没有想到我做了什么错误,所以我启动到Windows,并通过Visual Studio运行它,它工作正常,我是新的Linux编写C,并知道问题是在While循环,我打电话sprintf()(哪是奇怪的,因为在循环之外的调用写入而不会导致错误)将令牌写入数组。 如果有人能告诉我哪里出错,我将不胜感激。 这是代码 /* split() Description: – takes a string and splits it into substrings "on" the <delimeter>*/ void split(char *string, char *delimiter) { int i; int count = 0; char *token; //large temporary buffer to over compensate for the fact that we have //no idea how many arguments will be passed […]

pthread:我想要传递一个结构指针在主要由pthread调用的函数

我想要做的是启动两个线程,每个线程运行crit_area函数。 我需要从main()传递ptrBank到crit_area()这样BANK结构balance[0]和balance[1]被线程顺序地更新。 为了实现这个,我创build了一个我自己的sem_class-1.h的信号灯类。 我已经通过了所有的编译错误,除了以下内容: race1d.cc:49:61: error: invalid conversion from 'void* (*)(BANK*)' to 'void* (*)(void*)' [-fpermissive] /usr/include/pthread.h:225:12: error: initializing argument 3 of 'int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)' [-fpermissive] race1d.cc:54:61: error: invalid conversion from 'void* (*)(BANK*)' to 'void* (*)(void*)' [-fpermissive] /usr/include/pthread.h:225:12: error: initializing argument 3 of 'int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)' [-fpermissive] race1d.cc: […]