c-下面的代码数组不是越界了吗??为什么还可以运行而且不报错??

问题描述

下面的代码数组不是越界了吗??为什么还可以运行而且不报错??
dp【j-1】这里当j==0时为什么不报错??
#include
#include
#include
using namespace std;
char str[1010];
int dp[1010];
bool judge(int xint y) //判断是不是回文串
{
while(x <= y)
{
if(str[x] != str[y])
return false;
x++;
y--;
}
return true;
}
int main()
{
int len i j;
while(gets(str) != NULL)
{
len = strlen(str);
for(i = 0; i < len; i++)
{
dp[i] = i + 1; //假设前面的都不能组成回文串
for(j = 0; j <= i; j++)
if(str[j] == str[i] && judge(ji))
dp[i] = min(dp[i] dp[j-1]+1);
}
printf(""%dn""dp[len-1]);
}
return 0;
}

解决方案

C++语言中数组越界访问系统不会给出任何的提示,程序员可以超出数组边界进行读/写从而造成内存的混乱,而这种错误对初学者来说是很容易出现的、而又偏偏是很难调试的,因为系统不会给出错误的提示,所以就这样使用数组是不安全的。
http://blog.sina.com.cn/s/blog_60e96a410100lpqt.html

解决方案二:
C++出于性能的考虑不会对越界进行检查,所以代码可能能运行可能不能。因为数组之后可能会有些内存不使用。当然这给调试程序带来困难。程序的错误很难发现。谁让你用C++呢,如果一不小心那就活该倒霉了。

解决方案三:
gdb调试一下,看一下dp【j-1】的内容

解决方案四:
C++不检查数组越界的错误,这个是程序员的责任。

解决方案五:

越界这事可大可小,如果刚好你越界的那个地址是一个很重要的数据,那么后果可想而知,但是C/C++不会对越界给出提示,只要有空间它就会写

解决方案六:
C++语言中数组越界访问系统不会给出任何的提示,程序员可以超出数组边界进行读/写从而造成内存的混乱,而这种错误对初学者来说是很容易出现的、而又偏偏是很难调试的,因为系统不会给出错误的提示,所以就这样使用数组是不安全的。

时间: 2025-01-03 08:54:24

c-下面的代码数组不是越界了吗??为什么还可以运行而且不报错??的相关文章

二维数组-java报错thread &amp;amp;quot;main&amp;amp;quot; java.lang.NullPointerException

问题描述 java报错thread "main" java.lang.NullPointerException import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.Scanner; public class exercise { /** * @param args */ public stat

tcp-使用TCP编程客户端代码运行起来报错

问题描述 使用TCP编程客户端代码运行起来报错 5C 本人是新手开始学习TCP编程:如下是客户端的代码```package Day23.Internet.TCP; import java.io.IOException;import java.io.OutputStream;import java.net.InetAddress;import java.net.Socket;import java.net.UnknownHostException; //TCP的客户端public class De

string-java选择排序使用swap()函数出现数组越界报错

问题描述 java选择排序使用swap()函数出现数组越界报错 class SelectSort{ public static void Swap(int[] arr,int i,int j){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } public static void PrintArray(int[] Array){ for(int i=0;i<Array.length;i++){ System.out.print("

weblogic连接池-Java调用Oracle存储过程传入数组参数报错

问题描述 Java调用Oracle存储过程传入数组参数报错 weblogic连接池 JNDI提供的链接保存 Oracle数组 报错 oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection 大家好,我在用weblogic连接池 JNDI

c语言-把数组中的元素 循环的作为函数中的参数 报错!

问题描述 把数组中的元素 循环的作为函数中的参数 报错! 把数组中的元素 循环的作为函数中的参数 怎么会报错 麻烦前辈帮忙看看 #include<stdio.h>int ShowNumber();int main (){ int number[10]; int i ; //循环变量 //随便为number数组赋值 for(i=0;i<10;i++)// i=0 1 2 3 4 5 6 7 8 9 { number[i]=i; } for(i=0;i<10;i++) { ShowNu

processing-java 数组定义,报错:unexpected token: [ 如何解决?

问题描述 java 数组定义,报错:unexpected token: [ 如何解决? RT,代码如下: class Data { String name; int size; int level; int father; int x = 0; int y = 0; int w = 0; int h = 0; Data(String tname, int tsize, int tlevel, int tfather) { name = tname; size = tsize; level = t

内存报错-异常代码: 0xc0000005

问题描述 异常代码: 0xc0000005 这是用PB9.0开发的一套系统,最近发现程序在运行过程中会有内存报错的情况 在我电脑怎么调试都没有出现过(我用虚拟机测试没有出现过),但是在客户的电脑上就会经常出现,客户机分别用XP和32位的Win7都测试过了,一直有这样的问题. WIN7下面的错误日志如下: 日志名称: Application 来源: Application Error 日期: 2015/3/28 7:15:08 事件 ID: 1000 任务类别: (100) 级别: 错误 关键字:

leetcode第一题java代码报错。求原因?

问题描述 leetcode第一题java代码报错.求原因? package com.hust.ali.test; import java.util.*; /** 给定一个整数数组,发现两个数字,使得它们添加到一个特定的目标数. 函数twoSum应返回两个数字,使得它们加起来的目标,其中索引1必须小于索引2的所有. @author Cat */ public class TwoNumSum { /* @param args */ public static void main(String[] a

c语言-声明一个数组,由用户输入数组长度。不赋初值不报错,赋初值就报错?为什么

问题描述 声明一个数组,由用户输入数组长度.不赋初值不报错,赋初值就报错?为什么 基本上,代码如下: #include<stdio.h> int main(){ int num = 0; printf(""输入数组长度:""); scanf(""%d""&num); int arr[num]; //编译不报错 //int arr[num] = {0}://编译报错 return 0;} 解决方案 因为C语言