文章目录
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:一点击【打开】就闪退
解决方法:
-
将FileToll.dll文件拷贝至D:\Microsoft Visual Studio\Common\MSDev98\AddIns(这个是根据你的安
装路径来的,可通过:桌面快捷方式–>右键–>打开文件所在位置。然后找到对应的 Addlns文件夹)
FileTool.dll百度网盘下载:https://pan.baidu.com/s/1c0GImvI
-
在dos命令下手动注册FileToll.dll文件:
在搜索框搜索CMD,以管理员身份运行。
语句:regsvr32 “D:\Microsoft Visual Studio\Common\MSDev98\AddIns\FileTool.dll”
【注】路径与1点一致,主义regsvr32后面加空格,以及路径要加双引号。
-
打开VC,点击Tools–>定制–>附加项和宏文件–>选中 FileTool Developer Studio Add-in 复选框,就可以
了。
-
此时可以看到,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窗口的。
解决方法:
无效: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行会出现问题
最后解决方法:
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 优化