错误 c2440 “初始化”: 无法从“void转换到“cv::mat”_干货 | C语言编程常见错误及解决办法…

  • Post author:
  • Post category:其他


点击上方

“我要学编程”

,选择

“置顶/星标公众号”


福利干货,第一时间送达!

f4263896c2663b54f726928e3f0609dd.png


一、指针没有指向一块合法的内存

定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内存。浅显的例子就不举了,这里举几个比较隐蔽的例子。


1、结构体成员指针未初始化

struct student
{
   char *name;
   int score;
}stu,*pstu;
int main()
{
   strcpy(stu.name,"Jimy");
   stu.score = 99;return 0;
}

很多初学者犯了这个错误还不知道是怎么回事。这里定义了结构体变量stu,但是他没想到这个结构体内部char *name 这成员在定义结构体变量stu 时,只是给name 这个指针变量本身分配了4 个字节。name 指针并没有指向一个合法的地址,这时候其内部存的只是一些乱码。所以在调用strcpy 函数时,会将字符串”Jimy”往乱码所指的内存上拷贝,而这块内存name 指针根本就无权访问,导致出错。解决的办法是为name 指针malloc 一块空间。同样,也有人犯如下错误:

int main()
{
   pstu = (struct student*)malloc(sizeof(struct student));
   strcpy(pstu->name,"Jimy");
   pstu->score = 99;
   free(pstu);return 0;
}

为指针变量pstu 分配了内存,但是同样没有给name 指针分配内存。错误与上面第一种情况一样,解决的办法也一样。这里用了一个malloc 给人一种错觉,以为也给name 指针分配了内存。


2、没有为结构体指针分配足够的内存

int main()
{
   pstu = (struct student*)malloc(sizeof(struct student*));
   strcpy(pstu->name,"Jimy");
   pstu->score = 99;
   free(pstu);return 0;
}

为pstu 分配内存的时候,分配的内存大小不合适。这里把sizeof(struct student)误写为sizeof(struct student*)。当然name 指针同样没有被分配内存。解决办法同上。


3、函数的入口校验

不管什么时候,我们使用指针之前一定要确保指针是有效的。一般在函数入口处使用assert(NULL != p)对参



版权声明:本文为weixin_30956665原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。