运行自制C程序时出现Permission denied错误,请求技术支持
问题1:编译命令错误导致无法执行
你用了gcc -c test.c -o test,其中-c参数的作用是只编译生成目标文件(.o),不进行链接生成可执行程序。所以生成的test是目标文件,不是可执行文件,自然会提示权限不足。
解决方法:去掉-c参数,重新编译:
gcc test.c -o test -Wall -std=c11
编译成功后,再执行./test即可(但代码本身还有内存问题,需要先修复)。
问题2:代码中的内存访问错误
即使编译正确,你的代码运行后会触发段错误,原因是image->r是未初始化的指针:
- 你只给
Image结构体本身分配了内存,但结构体里的r指针并没有指向有效的内存空间,直接给image->r[0]赋值会访问非法内存。
修复后的代码:
#include <stdio.h> #include <stdlib.h> typedef struct{ unsigned int *r; }Image; int main() { printf("yes\n"); unsigned int a = 7; Image *image; // 给结构体分配内存 image = malloc(sizeof(Image)); // 给r指针分配内存,这里分配1个unsigned int的空间 image->r = malloc(sizeof(unsigned int)); // 现在可以安全赋值 image->r[0] = a; printf("r[0] = %d\n",image->r[0]); // 注意:先释放r指向的内存,再释放结构体本身 free(image->r); free(image); return 0; }
额外提示
- 编译时的
-Wall参数会显示更多警告信息,能帮你提前发现潜在问题,比如未初始化指针这类隐患。 - 内存分配后可以加空指针检查(比如
if (image == NULL)),避免内存分配失败导致的错误,初学阶段可以先重点理解指针和内存分配的基本逻辑。
内容的提问来源于stack exchange,提问作者MyManAbrez
相关产品推荐
相关产品推荐

