我该怎么做“分段故障(核心转储)”的错误?(没有找到答案其他地方)
问题描述:
当我运行下面的节目,我有这个问题。一切都编译得很好,但是当我运行它并输入内容时,我收到了分段错误消息。它不是一个完整的代码,只是它的一部分,它应该将一些字符串(地址)从输入文件写入字符串数组,然后在数组中搜索可能的搜索字符串(作为参数输入)。我该怎么做“分段故障(核心转储)”的错误?(没有找到答案其他地方)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
char *entry1 = argv[1], *adress[100], *possibleAdress[100], c;
int i,j,k,possible = 0;
while(c = getchar()!=EOF) //write addresses to array
{
while(c = getchar()!=13)
{
adress[i][j] = c;
j++;
}
i++;
}
i = 0;
while(adress[i]!=0) //find adresses matching with search enrty
{
j = 0;
while(adress[i][j]!=0)
{
while(entry1[j]==adress[i][j])
j++;
if(j==strlen(entry1)) //check if the whole search entry is matching
{
possibleAdress[k] = adress[i];
k++;
}
i++;
}
}
return 0;
}
答
有一件事我可以清楚地看到不正确的是,你在while循环使用之前,你有没有初始化主i的值和j。
答
我该怎么做“分段故障(核心转储)”的错误?
前一个问题什么是内存设计缺陷:What is a segmentation fault?
你跟他们做的是打破了一个调试器,GDB例如。然后,您可以逐行逐行执行代码,通过指令进行指导并了解问题的原因。
其他的答案是正确的,我& j是初始化。调试将允许您检查这些变量和内存访问。
答
你需要大量的修正。要增加一个指针,你需要分配足够的内存给它。你的while循环完全错误,你试图增加指针值而不分配内存,这就是它给你sig故障错误的原因。
第一变化这一行:int i=0,j=0,k=0,possible = 0;
现在while循环
while(c = getchar()!=EOF) //write addresses to array
{
j = 0;
char *p = malloc(30);// size should be change as per your requirement
address[i] = p; //store the address of p here
while(c = getchar()!=13)
{
*((adress[i])+j) = c; //it is just like *p++ = c
j++;
}
i++;
}
我j和k都没有被初始化中使用的,程序调用未定义的行为。 – George
此外,您还没有为'adress'和'possibleAdress'分配任何内存,所以您正在将值写入随机地址。段错误正是正确的回应。 –
只是改变你的数组,使他们不指针。否则,你将不得不做的@LeeDanielCrocker建议和实际分配的内存为您阵列明确使用malloc 焦炭取值范=的argv [1],ADRESS [100],possibleAdress [100],C; – victor