Cerror

2020.8.14 15:04

报错: Administrator privileges required for OLE Remote Procedure Call debugging: this feature will not work.

OLE远程过程调用调试所需的管理员特权:此功能不起作用。

原因: VC++和WIN7的兼容性有问题,毕竟其不是同一时代的产品。提示需要管理员的权限。

解决方法: 首先选择VC++的快捷方式,右键单击,选择“以管理员身份运行”,再在菜单里选择“文件”打开你要调试的程序即可进行调试。

2020.8.14 15:29

问题: VC++6.0:一点击【打开】就闪退

解决方法:

  1. FileToll.dll文件拷贝至D:\Microsoft Visual Studio\Common\MSDev98\AddIns(这个是根据你的安

    装路径来的,可通过:桌面快捷方式–>右键–>打开文件所在位置。然后找到对应的 Addlns文件夹)

    FileTool.dll百度网盘下载:https://pan.baidu.com/s/1c0GImvI

  2. 在dos命令下手动注册FileToll.dll文件:

    在搜索框搜索CMD,以管理员身份运行。

    语句:regsvr32 “D:\Microsoft Visual Studio\Common\MSDev98\AddIns\FileTool.dll”

    【注】路径与1点一致,主义regsvr32后面加空格,以及路径要加双引号。

在这里插入图片描述

  1. 打开VC,点击Tools–>定制–>附加项和宏文件–>选中 FileTool Developer Studio Add-in 复选框,就可以

    了。

  2. 此时可以看到,A 和 O 的文件栏按钮:

    A:Add File to Project
    O:Open

2020.8.14 16:44

报错: LINK : fatal error LNK1168: cannot open Debug/test1.exe for writing

错误原因: 由于你前一次调试运行时最后没有按任意键退出程序,而是点“关闭”按钮关cmd窗口的。

2020-08-14_163056

解决方法:

​ 无效:1. 打开任务管理器找到test1.exe关闭进程。

​ 2.cmd – tasklist–taskkill /im 进程名 /f。

​ 有效:重启程序

注意: 下次调试运行的时候键入任意键来关闭cmd窗口。

2020.8.29 08:47

警告: warning C4305: ‘initializing’ : truncation from ‘const double’ to ‘float’

警告原因: 浮点型常量默认为double类型,声明float常量时,须加 ‘f ’或 ‘F’ 。

#include <stdio.h>
int main()
{
	float d1 =1.1;//从double到float截断,1.1是double类型
	float d2 = 1.1f;//1,1f是float类型
	double d3 = 1.3;
}

2020.8.31 16:01

报错: variable-sized object may not be initialized可变长的队列不能被初始化

报错原因:意思是ab都是变量,不能在申明new_arr的时候,直接初始化new_arr内的元素

解决方法:

int a = 4;
int b = 5;
char new_arr[a][b] = {0};  //此处会报错 variable-sized object may not be initialized

// 报错:可变长的队列不能被初始化, 意思是ab都是变量,不能在申明new_arr的时候,直接初始化new_arr内的元素
// 正确的做法如下
int a = 4;
int b = 5;
char new_arr[a][b];
for(int i=0;i<a;i++)
	for(int j=0;j<b;j++)
		new_arr[i][j] = 0;

2020.9.2 10:20

问题描述:

Error: subscripted value is neither array nor pointer nor vector
		下标值既不是数组也不是指针也不是向量

具体描述:

想要将n位整数分离,将分离的各个位置存储到数组中。

**问题位置:**41 7

#include <stdio.h>
int count(int i);
int arry(int j, int n);
int main() 
{
	int i;
	int k;
	int j;
	int n = 0;
	scanf("%d", &i);
	n = count(i);



	for (k=0;k<n; k++)
	{
		j = i%10;
		i = i /10;
		printf("%d", j);
	}
	
	
	return 0;
}
int count(int i)
{
	int n= 0;
	while (i>0)
	{
		i = i / 10;
		n++;
	}
	
	return n;
}

int arry(int j, int n)
{
	int l;
	for (l=0; l<n;l++)
		arry[l] = j;//问题位置
}

原因分析:

企图使用可变的变量作为下标,尤其是对于数组,可以使用下标操作的类型比如指针。

解决方法:

需要检查要操作的对象是否是指针,如果不是可以将其类型转换为指针再进行操作。

2020.11.24 18:19

警告:[Warning] function returns address of local variable [-Wreturn-local-addr]

​ [警告]函数返回局部变量的地址

问题位置: 54行2列

#include <stdio.h>
#define N 100
int *part(int n);
int main()
{
	int i, j=0, k;
	int n, x;
	int * p;
	p = part(123);

	for (i=0; i<3; i++)
		printf("%d\n", p[i]);
	
	
/* 
	int a[N];
	
	for (x=0; ; x++)
	{
		
		
	}
	
	n = x*x;
	
	while(n != 0)
	{
		i = n % 10;
		a[j] = i;
		j++;
		n = n / 10;	
	}
	
	for (i=0; i<j; i++)
		printf("%d\n", a[i]);
	*/
	
	return 0;
}
int *part(int n)
{
	
	int a[N];
	int i, j;

	while(n != 0)
	{
		i = n % 10;
		a[j] = i;
		j++;
		n = n / 10;	
	}
	
	return a;
}

函数描述: 这个函数要完成的功能是输入n位整数,然后将整数从个位依次拆分,存到数组里

面,然后返回数组。例如,输入123, 返回数组a[] = {3, 2, 1};

原因分析: 我们知道,局部变量存储在栈区,在代码块执行前申请一片内存,执行完毕后,这块

内存即被释放;*part()函数是指针型函数,指针型函数返回的是一个指针,就是返回的是一个地

址,但是指针型函数要注意的是,其返回的地址必须是函数调用结束后依然存在的存储单位地

址;而此处int a[N];是局部变量,其返回的地址a在函数调用结束后已经不存在了,所以执行时

会出现警告。

解决方法: 将int a[N];改为in *a;但是改完之后49行会出现问题

Snipaste_2020-11-24_18-58-59

最后解决方法:

int *part(int n)
{
	
	int *a;
	int b[N];
	int i, j;

	while(n != 0)
	{
		i = n % 10;
		b[j] = i;
		j++;
		n = n / 10;	
	}
	
	a = b;
	
	return a;
}

方程全体

#include <stdio.h>
#define N 100
int *part(int n);
int count(int n);
int main()
{
	int i, j=0;
	int n = 123, x;
	int * p;
	j = count(n);
	printf("j = %d\n", j);
	p = part(n);

	for (i=0; i<j; i++)
		printf("%d\n", p[i]);
	
	return 0;
}
int *part(int n)
{
	
	int *a;
	int b[N];
	int i, j;

	while(n != 0)
	{
		i = n % 10;
		b[j] = i;
		j++;
		n = n / 10;	
	}
	
	a = b;
	
	return a;
}
int count(int n)
{	
	int i, j = 0;
	while(n != 0)
	{
		i = n % 10;
		j++;
		n = n / 10;	
	}
	
	return j;
}

网上问题解决方法:https://segmentfault.com/a/1190000019806196

2020.11.24 23:31

问题描述:

程序1

#include<stdio.h>
#define N 100
int *part(int n);
void traversearray(int a[], int length);
int main()
{
	int i;
	int *p;
	int n = 12345;
	p = part(12345);
	

	for (i=0; i<5; i++)
		printf("%d", p[i]);	

	printf("\n");
	
	traversearray(p, 5);
		
	return 0;
}
int *part(int n)
{
	
	int *a;
	int b[N];
	int i, j=0;

	while(n != 0)
	{
		i = n % 10;
		b[j] = i;
		j++;
		n = n / 10;	
	}
	
	a = b;
	
	return a;
}
void traversearray(int a[], int length)
{
	int i;
	for (i=0; i<length; i++)
		printf("%d", a[i]);	
}
在Dev-C++中输出的结果是:
---------------------------
54320
5400221479303
---------------------------

程序2

#include<stdio.h>
void traversearray(int a[], int length);
int main()
{
	int length = 5;
	int i;
	int a[] = {1,2,3,4,5};
	
	for (i=0; i<length; i++)
		printf("%d ", a[i]);	
	printf("\n");
	traversearray(a, length);
	
	
	return 0;
} 
void traversearray(int a[], int length)
{
	int i;
	for (i=0; i<length; i++)
		printf("%d ", a[i]);	
}
在Dev-C++中输出的结果是:
---------------------------
1 2 3 4 5
1 2 3 4 5
---------------------------
 

程序3

#include <stdio.h>
#define N 100
void part(int a[], int n);
void traversearray(int a[], int length);

int main() {
	int i;
	int a[N];
	int n = 12345;

	part(a, n);

	for (i = 0; i < 5; i++)
		printf("%d", a[i]);

	printf("\n");

	traversearray(a, 5);

	return 0;
}

void part(int a[], int n) {

	int i, j = 0;

	while (n != 0) {
		i = n % 10;
		a[j] = i;
		j++;
		n = n / 10;
	}
}

void traversearray(int a[], int length) {
	int i;
	for (i = 0; i < length; i++)
		printf("%d", a[i]);
}
在Dev-C++中输出的结果是:
---------------------------
54320
54001520161886
---------------------------

原因分析: 局部变量存储在栈区,在代码块执行前申请一片内存,执行完毕后,这块

内存即被释放,所以即使程序1中用指针a指向数组b,但是数组b是函数的part()的局部变量,在

执行完函数之后会被释放,所以程序1在遍历数组p的时候输出的应该是指针p指向的地址。

原因分析2: 因为程序1在运行过程中出现错误,导致不能重新编译,所以程序3的运行结果和程

序1相同。

解决方法: 将原文件删除,重新创建。

2020.11.26 15:11

警告: 迭代 18 会引起未定义的行为 [-Waggressive-loop-optimizations]

问题位置: 1行17列

#include<stdio.h>
int main()
{
	
	int i, j, k, l;
	int b[] = {1,2,3,3,4,5,5,5,6,7,7,7,7,8,9,9,9,9,9};//19个
	
	for (i=0; i<19; i++)
	{
	//	if (i <= 17)
			if (b[i] == b[i+1])
				printf("相同");
	}
	
	return 0;
}

原因分析: 数组元素为19个,所以数组下标最大为18,而11行的语句if (b[i]==b[i+1])

当i=18的时候b[i+1]并没有定义。

解决方法: 在11行语句之前加上if (i <= 17)限制i的大小。

2020.11.28 19:57

错误:[Error] called object ‘partition’ is not a function or function pointer

[错误]称为对象’分区’的不是函数或函数指针

报错位置: 6行19列

void quickSort(int arr[], int startIndex, int endIndex) 
{
	if (startIndex < endIndex) 
	{
		//找出基准
		int partition = partition(arr, startIndex, endIndex);
		//分成两边递归进行
		quickSort(arr, startIndex, partition - 1);
		quickSort(arr, partition + 1, endIndex);
	}
}

原因分析: 你同时定义了一个函数名和一个变量都叫partition而因为你在main函数之前就已经

声明了partition是一个函数,所以提示你这里partition的使用不是作为函数,只用错误Error。

解决方法: 将声明的函数partition()或者定义的变量partition改名即可。

Vocabulary

fatal a. 致命的;灾难性的;毁灭性的;导致失败的
const n. 常量

truncation 截断

initializing (正在)初始化

optimization 优化

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值