new/delete 메모리 에러

yeonjooo의 이미지

#include <iostream>
#include <string>
using namespace std;
double *P;
int *N;
int *K;
double **dp;
int M;
double getLowestP(int, int);
 
int main() {
	int count = 0;
 
	while (!cin.eof()) {
		P = new double[23];
		P[0] = 0;
		N = new int[23];
		N[0] = 0; N[1] = 1;
		K = new int[101];
 
		count++;
 
		cin >> P[1];
		P[1] = floor(P[1] * 100) / 100;
		cin >> M;
 
		for (int i = 2; i < M + 2; i++) {
			cin >> N[i];
			cin >> P[i];
			P[i] = floor(P[i] * 100) / 100;
 
		}
 
		/*문자열 읽어와 정수만 추출하여 K 배열 채우기*/
		int i = 0;
		string input_k;
		getline(cin, input_k);
 
		if(input_k.compare(""))
			getline(cin, input_k);
 
		while (input_k[i] == ' ')
			i++;
		if(i!=0)
			input_k = input_k.substr(0, i-1);
		i = 0;
 
		int position = input_k.find(" ");
		while (position != -1) {
			K[i] = atoi(input_k.substr(0, position).c_str());
			input_k = input_k.substr(position + 1);
			i++;
			position = input_k.find(" ");	
		}
 
		if (position == -1 && !input_k.empty())
			K[i] = atoi(input_k.substr(0, position).c_str());
 
 
 
		cout << "Case " << count << " : " << endl;
		for (int h = 0; h < M; h++) {
 
			/*dp 배열 초기화*/
			dp =  new double*[M + 2];
			for (i = 0; i < M + 2; i++) {
				dp[i] = new double[K[h] + 1];
				for (int j = 0; j < K[h] + 1; j++)
					dp[i][j] = 0;
			}
 
			double result = getLowestP(M + 1, K[h]);
 
			cout << "Buy " << K[h] << " for $" << result << endl;
 
			for (i = 0; i < M + 2; i++)
				delete []dp[i];
			delete []dp;
		}
 
		delete []P;
		delete []N;
		delete []K;//////////////////////에러 발생 부분
	}
}
/*재귀 함수*/
double getLowestP(int i, int j) {
 
	if ((i <= 0) || (j <= 0))
		return 0;
 
	if (dp[i][j] != 0)
		return dp[i][j];
	else {
		int temp1 = getLowestP(i, j - N[i]) + P[i];
		int temp2 = getLowestP(i - 1, j);
		if (temp2 == 0)
			dp[i][j] = temp1;
		else {
			if (temp1 < temp2)
				dp[i][j] = temp1;
			else
				dp[i][j] = temp2;
		}
		return dp[i][j];
	}
}

안녕하세요. new/delete로 인한 메모리 문제가 발생하여 이렇게 질문드립니다. 발생한 에러는 std::bad_array_new_length 에러입니다.
배열을 잘못 사용한 것 같은데, 아무리 찾아봐도 그 이유를 잘 모르겠습니다. 각 배열의 크기는 입력값의 최대 범위로 잡았고, 실제 test case들의 경우 대부분 원래 크기의 절반도 사용하지 않았습니다.

yeonjooo의 이미지

로직을 잘못 짜서 배열 크기를 음수로 했네요ㅠㅠ. 해결했습니다. 감사합니다.