Thread 1: EXC_BAD_ACCESS (code=1, adress=0x0)
Thread 1: EXC_BAD_ACCESS (code=1, adress=0x0)
我正在用c++ (XCode)制作Dijikstra算法。我得到exc_bad_access code=1在那一刻:
for (k=0; k<M; k++){
input>>i>>j>>V;
Graf[i][j] = V;
}
整个代码:#include <iostream>
#include <fstream>
int min(int[]);
int **Graf;
int *Label;
int *Active;
int i, j, k;
int Start, N, M, V, Last;
using namespace std;
int min(int array[]) {
int min, k, min_pos = -1;
min = 32767;
for (k=0; k<M; k++) {
if (array[k] < min && Active[k] == 1){
min = array[k];
min_pos = k;
}
}
return min_pos;
}
int main(){
ifstream input ("input.txt");
input>>N>>M>>Start>>Last;
if (!input){
cout << "File not found" << endl;
return 1;
}
Graf = new int *[N];
for (i=0; i<N; i++){
Graf[i] = new int [N];
}
for (i=0; i<N; i++){
for (j=0; j<N; j++){
Graf[i][j]=0;
}
}
Label = new int [N];
Active = new int [N];
for (i=0; i<N; i++){
Label[i] = 0;
Active[i] = 0;
}
for (k=0; k<M; k++){
input>>i>>j>>V;
Graf[i][j] = V;
}
for (i=0; i<M; i++){
Label[i] = 32767;
Active[Start] = 1;
}
Label[Start] = 0;
i = Start;
do
{
for (j=0; j<N; j++)
if (Graf[i][j] != 0 && Label[j] > Label[i] + Graf[i][j]){
Active[j] = 1;
Label[j] = Label[i] + Graf[i][j];
}
Active[i] = 0;
i=min(Label);
}
while (i != -1);
cout << Label[Last] << endl;
return 0;
}
我找了好几天错了,可是找不到。
Input.txt5 9 0 40 0 5 2 4 00 0 0 7 0 65 0 0 9 1 152 7 9 0 0 124 0 1 0 0 80 6 15 12 8 0
我相信你的错误是在你的输入文件中:你读取I和j并使用它来访问你的数组,而没有验证这些值是否在预期的范围内。
例如,如果您用错误消息改进您的问题代码,如:
for (k=0; k<M; k++){
input>>i>>j>>V;
if (i>=N || j>=N) {
cerr << "Bad Input for k="<<k<<": "<<i<<","<<j<<","<<V<<endl;
continue;
}
//assert(i<N && j<N); variant if you don't care for the values
Graf[i][j] = V;
}
您将得到以下结果:
Bad Input for k=3: 7,0,6
Bad Input for k=4: 5,0,0
Bad Input for k=5: 9,1,15
Bad Input for k=6: 2,7,9
相关文章:
- 瓦尔格林德错误 - 地址0x0不是堆叠的 malloc'd 或自由的
- 线程 1:xcode 中出现EXC_BAD_ACCESS(代码 = 1,地址 = 0x0)错误
- c++ Valgrind:地址0x0不是堆叠的、恶意的或(最近)释放的
- Xcode:线程1:exc_bad_access(代码= 1,地址= 0x0)在缩短列表时
- 线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x0)错误
- 例外:使用 C++ EXC_BAD_INSTRUCTION(代码 = EXC_I386_INVOP,子代码 = 0x0)
- 将指向Adress 0指向ADRESS 0的指针在C 中做什么?
- 程序收到信号sigsegv,分段故障.在al_draw_tinted_bitmap中(bitmap = 0x0,tint
- 为什么printf()函数打破了C中的指针adress
- 如何检查指针指向的地址是否0x0?
- qt5cored!qobject :: Disconnect ..在0x0处读取访问违规行为
- C++:尝试将新节点添加到链表会产生"线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x0)"错误
- (.bss+0x0):代理的多重定义
- C++序列集与get;get返回0x0
- 线程1:EXC_BAD_ACCESS(代码=1,地址=0x0)问题生成
- 线程1:EXC_BAD_ACCESS(代码=1,地址=0x0)
- 使用 swprintf() 打印"0x0"的格式字符串应该是什么?
- 为什么"the adress of bool will always evaluate as true"会在这里?
- 错误的重新定位地址0x0在 python.data C 扩展中
- Thread 1: EXC_BAD_ACCESS (code=1, adress=0x0)