Tag: 动态

c中的动态与静态数组

以下代码使用malloc函数创建一个数组。 但我知道只需int array [size]就可以做得更简单。 我认为这是静态数组。 但是用malloc函数是动态数组吗? 我在网上发现了这个代码……真正发生了什么,以及静态数组和动态数组(以及堆内存之间的静态内存)之间的区别。 你可以在运行时更改动态数组的大小吗? 或者…我完全不知道…如果有人能解释我会很感激:) #include #include #include int main(void) { int size; int i; printf(“Choose size of array: “); scanf(“%d”,&size); /*—MALLOC/FREE—*/ int *m_array = (int *)malloc((size+1)*sizeof(int)); memset(m_array,’\0′,size+1); for(i=0; i<size ; i++) { m_array[i]=i; printf("%d ",m_array[i]); } printf("\n"); free(m_array); return 0; }

检查C中的字符串是否是回文结构

我有一个关于这个代码的问题,我正在写一个练习。 我要检查字符串是否是回文。 我无法更改函数的声明。函数只返回1,当所有字母都相同(如“aaaa”)但如果我用其他回文(如“anna”)收取句子,函数返回0,我无法弄清楚为什么会出现这种情况。谢谢! char* cargar (char*); int pali (char*); int main() { char*texto=NULL; texto=cargar(texto); int res=pali(texto); if(res==1){printf(“\nPalindrome”);} else printf(“\nNot palindrome”); return 0; } char* cargar (char*texto) { char letra; int i=0; texto=malloc(sizeof(char)); letra=getche(); *(texto+i)=letra; while(letra!=’\r’){ i++; texto=realloc(texto,(i+1)*sizeof(char)); letra=getche(); *(texto+i)=letra;} *(texto+i)=’\0′; return texto; } int pali (char* texto) { int i; for(i=0;*(texto+i)!=’\0′;i++){ }i–; if(i==0||i==1){return 1;} if(*texto==*(texto+i)){ […]

无法正确读取.bmp头文件

我试图接受一个.bmp文件并最终逐个编辑像素,但我想出了INFOHEADER结构中返回给我的宽度和高度的问题。 返回的宽度是13107200,高度是65536.但是,每当我运行程序时,总共只计算了60003个像素。 我不知道为什么会这样。 任何帮助将不胜感激。 #include #include int main( int argc, char *argv[] ){ //define structures typedef struct { unsigned short int Type; /* Magic identifier */ unsigned int Size; /* File size in bytes */ unsigned short int Reserved1, Reserved2; unsigned int Offset; /* Offset to data (in B)*/ }HEADER; /* — 14 Bytes — […]

在函数内动态分配2D数组(使用指针返回已分配对象的地址)

我想知道如何使用函数参数将指针传递给动态分配的数组。 该函数应该分配数组10×10(为简单起见,跳过检查)。 这可能吗? 我究竟做错了什么? 提前致谢。 int array_allocate2DArray ( int **array, unsigned int size_x, unsigned int size_y) { array = malloc (size_x * sizeof(int *)); for (int i = 0; i < size_x; i++) array[i] = malloc(size_y * sizeof(int)); return 0; } int main() { int **array; array_allocate2DArray (*&array, 10, 10); }

C – 共享内存 – 共享结构中的动态数组

我正在尝试分享这样的结构 例: typedef struct { int* a; int b; int c; } ex; 在进程之间,问题是当我使用malloc初始化’a’时,它变为私有的进程堆执行此操作(或者至少我认为这是发生的事情)。 有没有办法用这个有效的结构创建共享内存(使用shmget,shmat)? 编辑:我正在研究Linux。 编辑:我有一个初始化缓冲区的进程,如下所示: key_t key = ftok(“gr”, ‘p’); int mid = shmget(key, sizeof(ex), IPC_CREAT | 0666); ex* e = NULL; status b_status = init(&e, 8); //init gives initial values to bc and allocate space for ‘a’ with a malloc e = […]

在调用函数时使GDB打印控制流程

如何调用感兴趣的gdb打印函数,根据堆栈的深度缩进? 我希望能够说出(制作): (gdb) trace Foo* Bar* printf 并让gdb打印所有以Foo或Bar开头的函数,因为它们被调用。 有点像gnu cflow,除了使用调试符号和仅实际调用的打印函数,而不是所有可能的调用流。 无法帮助的工具包括cachegrind,callgrind和oprofile,它们最常调用函数的结果。 我需要保留的调用顺序。 通配符(或等效的)是必不可少的,因为有很多Foo和Bar函数。 虽然我愿意完全记录所有function。 或者,也许告诉gdb记录特定库中的所有函数。 某些GDB向导必须有一个用于此常见作业的脚本!

是否可以在C中动态定义结构

我很确定这最终会成为一个非常明显的问题,这就是为什么我没有找到关于它的更多信息。 不过,我认为值得问:) 基本上,使用结构访问数据非常快。 如果数据以可以立即作为结构处理的forms从网络中传出,从性能的角度来看,这是非常好的。 但是,是否可以动态定义结构。 客户端和服务器应用程序是否可以协商数据流的格式,然后将该定义用作结构? 如果没有,有没有更好的方法呢? 谢谢大家!

在C中使用Realloc

就realloc的使用而言,它确实是一个建议,更具体地说,如果我可以利用它来简化我现有的代码。 基本上,下面的内容,它动态分配一些内存,如果我超过256,那么数组需要增加大小,所以我malloc一个临时数组,大小2倍,memcpy等(见下文)。 我只是想知道是否可以在下面的代码中使用realloc,简化它,任何建议,示例代码,甚至是如何实现它的提示非常感谢! 干杯。 void reverse(char *s) { char p; switch(toupper(s[0])) { case ‘A’: case ‘E’: case ‘I’: case ‘O’: case ‘U’: p = s[strlen(s)-1]; while( p >= s ) putchar( p– ); putchar( ‘\n’ ); break; default: printf(“%s”, s); break; } printf(“\n”); } int main(void) { char c; int buffer_size = 256; char *buffer, […]

C后期绑定与未知参数

我目前处于需要调用许多在运行时提取的函数指针的情况下。 问题是参数在编译时是未知的。 但是,在运行时我收到的数据允许我知道函数的参数,我甚至可以将参数存储在char *数组中。 问题是我没有函数指针模型来将其强制转换。 在高级语言中,我知道有像“InvokeMethode(String name,Byte [] args)”这样的函数,它像参数一样解释字节数组。 由于C中不存在reflection,我没有希望用函数指针来看这个。 我想到的一个解决方案(它真的很糟糕)是在编译时创建一个函数指针模型,它将以“硬编码方式”将ptr转换为正确的类型,如下所示: void callFunc64Bits(void* funcPtr,long long args); void callFuncVoid(void* funcPtr); 问题是我必须创建像这样的100函数才能正确地转换指针。 有没有办法更有效地做到这一点? 非常感谢你!

在C中动态创建函数

如何在C中动态创建函数? 我尝试总结我的C问题如下: 我有一个矩阵,我希望能够使用一些函数来生成它的元素。 函数没有参数 因此我定义了以下内容: typedef double(function)(unsigned int,unsigned int); /* writes f(x,y) to each element x,y of the matrix*/ void apply(double ** matrix, function * f); 现在我需要在代码中生成常量函数。 我想过创建一个嵌套函数并返回它的指针,但是GCC手册(允许嵌套函数)说: “如果你试图在包含函数退出后通过它的地址调用嵌套函数,那么一切都会崩溃。” 我希望从这段代码中得到… function * createConstantFunction(const double value){ double function(unsigned int,unsigned int){ return value; } return &function; } 那么我怎样才能让它发挥作用? 谢谢!