Tag: 运行时错误

在c 中使用指针编写合并排序的问题

我正在尝试用指针编写一个合并排序程序,它接近工作正常,但是存在的问题是在输出中有一些’0’而不是一些排序数组的数字。 为了测试代码,你必须编写一个txt文件prova.txt ,其中有数组,一个数字用于行。 例如: prova.txt: 4 7 2 9 1 45 87 运行代码时,我期待输出 0: 1 1: 2 2: 4 3: 7 4: 9 5: 45 6: 87 但我明白了 0: 1 1: 0 2: 0 3: 0 4: 0 5: 0 6: 2 此外,有什么建议可以让我改进我的代码吗? #include int *merge(int left[], int right[], int n){ int *ordinato, i=0, j=0; […]

当我访问数组的超出边界元素时,为什么不会出现运行时错误?

在下面的代码中,我尝试访问数组的’-1’元素,我没有得到任何运行时错误。 #include int A[10] = {0}; int main(){ A[-1] += 12; printf(“%d”,A[-1]); return 0; } 当我运行代码时,它输出12表示它正在向不存在的A [-1]添加12。 直到今天每当我试图访问越界元素时,我都遇到了运行时错误。 我以前从未尝试过简单的代码。 任何人都可以解释为什么我的代码成功运行? 我在我的计算机上运行它,也在ideone上运行它,在它成功运行的两种情况下。

使用strtok存储数组

int main (){ FILE *file = fopen ( “C:\\input.txt”, “r” ); int i=0, j=0, k=0; char *result[10][10]; char line[100]; char *value; char *res[100][100]; for(i=0; i<=9; i++){ for(j=0;j<=9;j++){ result[i][j] = NULL; } } while(fgets(line, sizeof(line), file)){ char *array=strtok(line,"\n"); res[0][0]=strdup(array); printf("\n\n\n %s RES \n",res[0][0]); array=strtok(array,"\n"); res[0][1]=strdup(array); printf("\n\n\n %s RES \n",res[0][1]); array=strtok(line,"\n"); res[0][2]=strdup(array); } 我想逐行将数组存储在txt文件中。 我的输入文件中有3行。 我希望每一行都存储在一个数组中。 我怎样才能做到这一点 […]

是否有相当于perror()的CUDA?

是否有CUDA函数用于打印调用者提供的错误消息,以及描述当前cudaStatus(或调用者提供的cudaStatus)的错误消息,a-la- perror() ?

C检查用户输入错误

我想要做的就是要求输入密码,如果输入超过10个字符,则打印出错误信息。 如果第一个输入短于10个字符,它可以工作。 它只打印出输入并退出程序。 如果输入超过10个字符,则会输出错误消息并要求输入新密码,但如果第二次尝试输入少于10个字符,则打印出输入,然后程序中断“Thread:1信号” SIGABRT“错误。 我知道我不应该使用获取,但我试图找到一种方法来使我的代码使用它。 #include #define BUFFER_LENGTH 11 int main() { int cont; while (1) { char line[BUFFER_LENGTH]; char *p; printf(“Enter Password: “); p = gets (line); if (strlen(p)>10) { printf(“Error! Password must be shorter than 10 characters! \n”); }else{ printf(p); printf(“\n”); break; } } }

字节编码function时的分段错误?

当我运行以下C程序(在Ubuntu中使用gcc编译)时,我遇到了分段错误。 #include char f[] = “\x55\x48\x89\xe5\x48\x89\x7d\xf8\x48\x89\x75\xf0\x48\x8b\x45\xf8\x8b\x10\x48\x8b\x45\xf0\x8b\x00\x89\xd1\x29\xc1\x89\xc8\xc9\xc3”; int main() { int (*func)(); func = (int (*)()) f; int x=3,y=5; printf(“%d\n”,(int)(*func)(&x,&y)); return 0; } 字符串f包含以下函数的机器代码。 int f(int*a, int*b) { return *a-*b; } CF: fo: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 : 0: 55 push %rbp 1: 48 89 e5 mov %rsp,%rbp 4: 48 89 7d […]

交换两个指针交换数组

我有以下代码,我想让它使板现在具有new_board的值,反之亦然。 由于它们都是指针我以为我可以交换它们指向的地址。 当我在print2()中打印时,地址被适当地交换。 但是,当我在print1()中打印时,地址以某种方式换回,这对我没有任何意义。 此外,如果我在print2()中打印出电路板中的值,它们也是正确的。 main(){ char *new_board = (char *)malloc(sizeof(char) * rows * cols ); char *board = (char *)malloc(sizeof(char) * rows * cols ); update_board2(board, new_board, rows, cols); print1(); } void update_board2(char *board, char *new_board, int rows, int cols){ //do a bunch of stuff char *temp = board; board = new_board; new_board = […]

使用指定的初始值设定项初始化数组时的奇怪值

当我初始化数组时,除了values[3]之外,所有输出看起来都没问题。 由于某种原因, values[3]初始化为values[0]+values[5]输出非常大的数字。 我的猜测是,我试图在将values[0]+values[5]正确存储到内存之前进行分配,但如果有人能够解释这将是很好的。 int main (void) { int values[10] = { [0]=197,[2]=-100,[5]=350, [3]=values[0] + values[5], [9]= values[5]/10 }; int index; for (index=0; index<10; index++) printf("values[%i] = %i\n", index, values[index]); return 0; } 输出如下: values[0] = 197 values[1] = 0 values[2] = -100 values[3] = -1217411959 values[4] = 0 values[5] = 350 values[6] = 0 […]

从命令提示符编译时的运行时错误R6034

我试图在命令提示符下用C编译一个简单的“hello world”程序(使用MinGW ),并出现以下错误: R6034:应用程序尝试错误地加载C运行时库。 请联系应用程序的支持团队以获取更多信息。 我已经对这个主题进行了几次搜索,似乎对其他程序放置在路径变量中的杂散mscvr文件达成了共识。 我已下载Process Explorer并尝试查找任何此类文件,但我找到的msvcr文件( msvcr80和msvcrt )都是从system32文件夹加载的。 这就是我在系统路径中的含义: %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\MATLAB\R2008a\bin\win32;c:\mingw\bin. 任何有关如何解决问题的帮助将不胜感激。

陷入了分段错误错误

我正在用c编写一个简单的程序,我遇到了这个错误 分段故障(核心转储) 我知道由于内存访问冲突而发生Segmentation fault错误。 但是我无法弄清楚下面简单的程序在哪里发生了坏的内存访问。 #include int main() { int a = 0; scanf(“%d”, a); printf(“%d\n”, a); return(0); } 我在这里在线编译,在代码块中它也给出了同样的错误。