Questions tagged «c»

C是用于系统编程(OS和嵌入式),库,游戏和跨平台的通用编程语言。该标记应与ISO 9899标准(除非另有说明,最新版本9899:2018中定义的有关C语言的一般问题)一起使用-还要使用c89,c99,c11等标记特定于版本的请求。C与C ++截然不同,在没有合理理由的情况下,不应将其与C ++标记结合使用。

9
编译错误:“ g ++:尝试执行'cc1plus'错误:execvp:没有这样的文件或目录”
当我使用popenin 编译C / C ++程序时,php出现此错误: g++: error trying to exec 'cc1plus': execvp: No such file or directory 但是,如果我在外壳中运行php代码,则工作正常。 在Arch Linux中 PHP代码: <?php function rfile($fp) { $out=""; while (!feof($fp)) { $out.= fgets($fp, 1024000); } return $out; } $p = popen('g++ -Wall -g aplusb.cc -o aplusb 2>&1', 'r'); $result = rfile($p); pclose($p); …
95 php  c++  c  linux  gcc 

3
什么是“记忆重击”?
我刚发现这篇博客文章提到“踩踏内存”: 一个很容易踩内存的C ++程序(如果您出生在托管代码世界中,您可能甚至从未听说过。) 实际上,我从未听说过! 那么,这是什么呢?什么时候发生?


8
如何追踪“双重释放或腐败”错误
当我运行(C ++)程序时,它因该错误而崩溃。 *检测到glibc * ./load:两次释放或损坏(!prev):0x0000000000c6ed50 *** 如何追踪错误? 我尝试使用print(std::cout)语句,但未成功。可以gdb简化这个过程?
95 c++  c  debugging  free 


2
当项目中包含程序集文件时,mmap产生了意外的执行权限
我用这个把我的头撞到墙上。 在我的项目中,当我使用mmap映射(/proc/self/maps)分配内存时,尽管我只请求了可读内存,但它仍是一个可读且可执行的区域。 在研究了strace(看起来不错)和其他调试之后,我能够确定似乎唯一可以避免这个奇怪问题的东西:从项目中删除程序集文件,只保留纯C。(什么?!) 因此,这是我一个奇怪的示例,我正在使用Ubunbtu 19.04和默认gcc。 如果使用ASM文件(为空)编译目标可执行文件,则将mmap返回一个可读和可执行区域,如果不进行编译则其行为正确。请参阅/proc/self/maps示例中已嵌入的输出。 example.c #include <stdio.h> #include <string.h> #include <sys/mman.h> int main() { void* p; p = mmap(NULL, 8192,PROT_READ,MAP_ANONYMOUS|MAP_PRIVATE,-1,0); { FILE *f; char line[512], s_search[17]; snprintf(s_search,16,"%lx",(long)p); f = fopen("/proc/self/maps","r"); while (fgets(line,512,f)) { if (strstr(line,s_search)) fputs(line,stderr); } fclose(f); } return 0; } example.s:是一个空文件! 产出 附带ASM版本 VirtualBox:~/mechanics/build$ gcc example.c …
94 c  linux  assembly  mmap 

12
如何用C在Linux中通过PID计算进程的CPU使用率?
我想以编程方式[在C中]为Linux中给定的进程ID计算CPU使用率%。 如何获得给定进程的实时CPU使用率百分比? 为了进一步说明: 我应该能够确定所提供的processid或进程的CPU使用率。 该进程不必是子进程。 我想要“ C”语言的解决方案。
94 c  linux  cpu-usage 


10
如何在C ++类的内存结构中创建一个“空格”?
问题 在低级别的裸机嵌入式环境中,我想在内存中以C ++结构创建一个空白且没有任何名称的名称,以禁止用户访问此类内存位置。 现在,我通过放置一个丑陋的uint32_t :96;位域(可以方便地代替三个词)来实现它,但是它会引起GCC的警告(位域太大,无法容纳在uint32_t中),这是非常合理的。 虽然可以正常工作,但是当您要分发包含数百种警告的库时,它并不是很干净。 我该怎么做呢? 为什么首先存在问题? 我正在从事的项目包括定义整个微控制器系列(STMicroelectronics STM32)的不同外设的存储器结构。为此,结果是一个类,其中包含多个结构的联合,这些结构定义了所有寄存器,具体取决于目标微控制器。 下面是一个非常简单的外设的简单示例:通用输入/输出(GPIO) union { struct { GPIO_MAP0_MODER; GPIO_MAP0_OTYPER; GPIO_MAP0_OSPEEDR; GPIO_MAP0_PUPDR; GPIO_MAP0_IDR; GPIO_MAP0_ODR; GPIO_MAP0_BSRR; GPIO_MAP0_LCKR; GPIO_MAP0_AFR; GPIO_MAP0_BRR; GPIO_MAP0_ASCR; }; struct { GPIO_MAP1_CRL; GPIO_MAP1_CRH; GPIO_MAP1_IDR; GPIO_MAP1_ODR; GPIO_MAP1_BSRR; GPIO_MAP1_BRR; GPIO_MAP1_LCKR; uint32_t :32; GPIO_MAP1_AFRL; GPIO_MAP1_AFRH; uint32_t :64; }; struct { uint32_t :192; GPIO_MAP2_BSRRL; GPIO_MAP2_BSRRH; uint32_t …

6
什么时候应该在C中使用malloc,什么时候不应该?
我了解malloc()的工作方式。我的问题是,我将看到以下内容: #define A_MEGABYTE (1024 * 1024) char *some_memory; size_t size_to_allocate = A_MEGABYTE; some_memory = (char *)malloc(size_to_allocate); sprintf(some_memory, "Hello World"); printf("%s\n", some_memory); free(some_memory); 为了简洁起见,我省略了错误检查。我的问题是,您不能通过初始化指向内存中某些静态存储的指针来完成上述操作吗?也许: char *some_memory = "Hello World"; 在什么时候您实际上需要自己分配内存,而不是声明/初始化需要保留的值?


3
如何为带有SRC,OBJ和BIN子目录的C项目创建Makefile?
几个月前,我想出了以下通用Makefile作业: # ------------------------------------------------ # Generic Makefile # # Author: yanick.rochon@gmail.com # Date : 2010-11-05 # # Changelog : # 0.01 - first version # ------------------------------------------------ # project name (generate executable with this name) TARGET = projectname CC = gcc -std=c99 -c # compiling flags here CFLAGS = -Wall -I. LINKER …
94 c  makefile 

3
如何使用GDB查看堆栈的内容?
我是GDB的新手,所以我有一些问题: 如何查看堆栈的内容?示例:要查看寄存器的内容,请输入info registers。对于堆栈,应该是什么? 我怎么看的内容$0x4(%esp)?当我输入时print /d $0x4(%esp),GDB给出了一个错误。 平台:Linux和GDB
94 c  assembly  gdb 



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.